Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C Datepicker值未保存在MySql数据库中_C#_Mysql_Datetimepicker - Fatal编程技术网

C# C Datepicker值未保存在MySql数据库中

C# C Datepicker值未保存在MySql数据库中,c#,mysql,datetimepicker,C#,Mysql,Datetimepicker,我正在使用WinC窗体创建一个凭证系统,它是Master/Detail,使用MySql作为后端。创建凭证类以设置以下内容: 1.创建新凭证 2.保存凭证 3.查询凭证 目前在保存凭证方面存在问题,我已经设置了插入/更新/删除命令,为了使这篇文章简短,我正在发布插入命令,以便应用程序的总体思路清晰: 类变量 ClsMgt da = new ClsMgt(); MySqlDataAdapter sqlDataMaster = new MySqlDataAdapter();

我正在使用WinC窗体创建一个凭证系统,它是Master/Detail,使用MySql作为后端。创建凭证类以设置以下内容:

1.创建新凭证 2.保存凭证 3.查询凭证

目前在保存凭证方面存在问题,我已经设置了插入/更新/删除命令,为了使这篇文章简短,我正在发布插入命令,以便应用程序的总体思路清晰:

类变量

    ClsMgt da = new ClsMgt();

    MySqlDataAdapter sqlDataMaster = new MySqlDataAdapter();
    private DataSet oDs = null;
    MySqlCommand selectcommand = null;
    MySqlCommand insertcommand = null;
    MySqlCommand updatecommand = null;
    MySqlCommand deletecommand = null;
    private DataTable dt = null;
    private DataTable dtDet = null;
    private String sSelProcName = null;
    private String sInsProcName = null;
    private String sDelProcName = null;
    private String sUpdProcName = null;
    private int voucType;

    public MySqlConnection oCn = new MySqlConnection();
    MySqlTransaction oTrn = null;
以下是新凭证程序,它将设置凭证窗体以空白记录打开:

 public DataSet NewVoucher()
    {
        DataSet vDs = new DataSet();
        oCn = da.GetConnection();

        if (oCn == null)
        {
            oCn.Open();
        }
        try
        {

            DataTable dt = new DataTable();

            //===============================================================================
            //--- Set up the Select Command
            //===============================================================================
            String sqlSelect = "Select vID, vTypeID, vNo, accCodeDR, accCodeCR, vDate, vChqNo, vChqDt, vPayName, vRemarks, vAmount from vMaster";
            sqlDataMaster = new MySqlDataAdapter(sqlSelect, oCn);
            sqlDataMaster.FillSchema(dt, SchemaType.Source);
            vDs.Tables.Add(dt);

            VoucherDetails vdet = new VoucherDetails();
            DataTable dtDet = new DataTable();
            dtDet = vdet.NewVoucherDet();

            vDs.Tables.Add(dtDet);

            vDs.Tables[0].Columns["vID"].AutoIncrement = true;
            vDs.Tables[0].Columns["vID"].AutoIncrementSeed = -1;
            vDs.Tables[0].Columns["vID"].AutoIncrementStep = -1;

            vDs.Tables[1].Columns["vID"].AutoIncrement = true;
            vDs.Tables[1].Columns["vID"].AutoIncrementSeed = -1;
            vDs.Tables[1].Columns["vID"].AutoIncrementStep = -1;
            vDs.EnforceConstraints = false;
            vDs.Relations.Add("VouchersToVoucherDetails", vDs.Tables[0].Columns["vID"], vDs.Tables[1].Columns["vID"]);

        }
        catch (MySqlException e)
        {
            MessageBox.Show(e.ToString());
        }

        return (vDs);
    }
以下是保存凭证的过程:

 public void SaveVoucher(DataSet oDs)
    {
        oCn = da.GetConnection();
        oTrn = oCn.BeginTransaction();
        sqlDataMaster = new MySqlDataAdapter();
        try
        {

            if (oCn == null)
            {
                oCn.Open();
            }

            //===============================================================================
            //--- Set up the INSERT Command
           //===============================================================================
            sInsProcName = "prInsert_Voucher";
            insertcommand = new MySqlCommand(sInsProcName, oCn, oTrn);
            insertcommand.CommandType = CommandType.StoredProcedure;
            insertcommand.Parameters.Add(new MySqlParameter("nNewID", MySqlDbType.Int32, 0, "vID"));
            insertcommand.Parameters["nNewID"].Direction = ParameterDirection.Output;
            insertcommand.UpdatedRowSource = UpdateRowSource.OutputParameters;
            insertcommand.Parameters.Add("svTypeID", MySqlDbType.Int32,0, "vTypeID");
            insertcommand.Parameters.Add("svNo", MySqlDbType.Int32, 0, "vNo");
            insertcommand.Parameters.Add("svaccCodeDR", MySqlDbType.VarChar, 12, "accCodeDR");
            insertcommand.Parameters.Add("svaccCodeCR", MySqlDbType.VarChar, 12, "accCodeCR");
            insertcommand.Parameters.Add("svDate", MySqlDbType.DateTime);
            insertcommand.Parameters["svDate"].SourceColumn = "vDate";
            insertcommand.Parameters.Add("svChqNo", MySqlDbType.Int32, 0, "vChqNo");
            insertcommand.Parameters.Add("svChqDt", MySqlDbType.DateTime);
            insertcommand.Parameters["svChqDt"].SourceColumn = "vChqDt";
            insertcommand.Parameters.Add("svPayName", MySqlDbType.VarChar, 100, "vPayName");
            insertcommand.Parameters.Add("svRemarks", MySqlDbType.VarChar, 70, "vRemarks");
            insertcommand.Parameters.Add("svAmount", MySqlDbType.Double, 0, "vAmount");

            sqlDataMaster.InsertCommand = insertcommand;
            //===============================================================================
            //--- Set up the UPDATE Command
            //===============================================================================
            sUpdProcName = "prUpdate_Voucher";
            updatecommand = new MySqlCommand(sUpdProcName, oCn, oTrn);
            updatecommand.CommandType = CommandType.StoredProcedure;
            updatecommand.Parameters.Add("nNewID", MySqlDbType.Int32, 4, "vID");
            updatecommand.Parameters.Add("svTypeID", MySqlDbType.Int32, 0, "CustomerID");
            updatecommand.Parameters.Add("svNo", MySqlDbType.Int32, 0, "vNo");
            updatecommand.Parameters.Add("svaccCodeDR", MySqlDbType.VarChar, 12, "accCodeDR");
            updatecommand.Parameters.Add("svaccCodeCR", MySqlDbType.VarChar, 12, "accCodeCR");
            updatecommand.Parameters.Add("svDate", MySqlDbType.DateTime);
            updatecommand.Parameters["svDate"].SourceColumn = "vDate";
            updatecommand.Parameters.Add("svChqNo", MySqlDbType.Int32, 0, "vChqNo");
            updatecommand.Parameters.Add("svChqDt", MySqlDbType.Date);
            updatecommand.Parameters["svChqDt"].SourceColumn = "vChqDt";
            updatecommand.Parameters.Add("svPayName", MySqlDbType.VarChar, 100, "vPayName");
            updatecommand.Parameters.Add("svRemarks", MySqlDbType.VarChar, 70, "vRemarks");
            updatecommand.Parameters.Add("svAmount", MySqlDbType.Double, 0, "vAmount");
            sqlDataMaster.UpdateCommand = updatecommand;

           //===============================================================================
            //--- Set up the DELETE Command
            //===============================================================================
            sDelProcName = "prDelete_Voucher";
            deletecommand = new MySqlCommand(sDelProcName, oCn, oTrn);
            deletecommand.CommandType = CommandType.StoredProcedure;
            deletecommand.Parameters.Add("nNewID", MySqlDbType.Int32, 4, "vID");
            sqlDataMaster.DeleteCommand = deletecommand;

            sqlDataMaster.Update(oDs.Tables[0]);
            VoucherDetails vDet = new VoucherDetails();
            vDet.SaveVoucher(oTrn, oDs.Tables[1]);

            oTrn.Commit();
            MessageBox.Show("Records saved.", "Saving Records");

        }
        catch (MySqlException e)
        {
            //===============================================================================
            //--- Rollback the transaction
            //===============================================================================
            oTrn.Rollback();
            //MessageBox.Show(e.ToString());
            MessageBox.Show(e.Message +" Error code: "+ e.Number);
            oDs.Tables[0].Rows[0]["vNo"] = DBNull.Value;

        }

    }
使用参数化的StoredProc在MySql数据库中保存数据,对于插入记录,使用以下StoredProc:

DELIMITER $$
USE `generalledger`$$

DROP PROCEDURE IF EXISTS `prInsert_Voucher`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `prInsert_Voucher`(
IN svTypeID INT, 
IN svNo INT, 
IN svaccCodeDR VARCHAR(12),
IN svaccCodeCR VARCHAR(12), 
IN svDate DATETIME,
IN svChqNo INT, 
IN svChqDt DATETIME, 
IN svPayName VARCHAR(100), 
IN svRemarks VARCHAR(70), 
IN svAmount DOUBLE,  
OUT nNewID INT)
BEGIN

INSERT INTO vMaster (vTypeID, vNo, accCodeDR,accCodeCR,vDate, vChqNo, vChqDt, vPayName, vRemarks, vAmount)
VALUES (svTypeID, svNo, svaccCodeDR, svaccCodeCR, svDate, svChqNo, svChqDt, svPayName, svRemarks, svAmount);
SET nNewID = LAST_INSERT_ID();
END$$

DELIMITER ;
问题是: vChqDt是MySql的DateTime字段,我在C Winform中使用DateTimePicker供用户选择日期。svChqDt是我在保存凭证过程中使用的参数,所有字段都已正确保存,但vChqDt…除外,它只会变为NULL。我在这个论坛上搜索解决方案,发现使用ToString将日期格式更改为yyyy mm dd就可以了。但问题是我应该把它放在哪里

编辑:原因=添加表单代码


好了,伙计们,我成功了。只需要改变这个:

txtChqDt.DataBindings.Add(new Binding("Text", bs, "vChqDt"));

谢谢


Ahmed

您的数据集oDs.Tables[0]中的vDate设置是否正确?请您验证。@XtremeBytes yes vDate设置正确,但主要原因是其值由TextBox设置的形式,但对于vChqDt,我尝试使用DateTimePicker,但目前为止它不起作用。从TextBox或DateTimePicker开始并不重要。svChqDt标记为日期,而不是日期时间。在svChqDt和svDate右侧有两个日期字段。是否都失败?@XtremeBytes是有两个日期字段vDate和vChqDt,只有vChqDt失败。svChqDt和svDate不是数据库字段,它们是参数。svChqDt为什么是Date而不是DateTime?Update和Insert命令中有不同的命令。
txtChqDt.DataBindings.Add(new Binding("Text", bs, "vChqDt"));
txtChqDt.DataBindings.Add(new Binding("Value", bs, "vChqDt", true));