如何将空日期插入访问

Posted

技术标签:

【中文标题】如何将空日期插入访问【英文标题】:how to insert null date into access 【发布时间】:2016-04-12 07:28:20 【问题描述】:

如果用户付款选择为现金,我想在访问数据库中插入空日期,然后检查日期应该为这个使用屏蔽文本框的即时消息插入为空,我也使用调试器,但每次调试器进入其他条件时,它给了我这里的数据不匹配异常是我给我的插入代码

string bank = txtbankname.Text;
            bank = "";
            string cheque = txtchequeno.Text;
            cheque = "";


            string billno = txtbillno.Text;
            billno = "";


            string codecreate = txtcodecreator.Text;
            codecreate = "";

            string connetionString = null;
            connetionString = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;
            cnn.ConnectionString = connetionString;

            string SqlString = "Insert Into Billing([FormNo],[Date],[TruckNo],[Office_Code],[Party_Code],[Party_Code1],[Location],[Supplier],[Item],[Invoice_no],[Invoice_date],[Package],[Weight],[Invest_Amount],[Percentage],[Amount],[Total_Amount],[Payment_Amount],[Payment_Type],[Bank_Name],[Cheque_No],[Cheque_Date],[Bill_No],[Bill_Date],[Code_Create]) Values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
            using (cmd = new OleDbCommand(SqlString, cnn))
            
                cnn.Open();
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@FormNo", txtformno.Text);
                cmd.Parameters.AddWithValue("@Date", txtdate.Text);
                cmd.Parameters.AddWithValue("@TruckNo", txttruck.Text);
                cmd.Parameters.AddWithValue("@Office_Code", txtofficecode.Text);
                cmd.Parameters.AddWithValue("@Party_Code", txtpartycode.Text);
                cmd.Parameters.AddWithValue("@Party_Code1", txtpartycode1.Text);
                cmd.Parameters.AddWithValue("@Location", txtlocation.Text);
                cmd.Parameters.AddWithValue("@Supplier", txtsupplier.Text);
                cmd.Parameters.AddWithValue("@Item", txtitem.Text);
                cmd.Parameters.AddWithValue("@Invoice_no", txtinvoice.Text);
                cmd.Parameters.AddWithValue("@Invoice_date", DateTime.Parse(txtmaskinvoice.Text));
                cmd.Parameters.AddWithValue("@Package", txtpackage.Text);
                cmd.Parameters.AddWithValue("@Weight", txtwieght.Text);
                cmd.Parameters.AddWithValue("@Invest_Amount", Convert.ToDouble(txtinvestamount.Text));
                cmd.Parameters.AddWithValue("@Percentage", txtpercentage.Text);
                cmd.Parameters.AddWithValue("@Amount", Convert.ToDouble(txtamount.Text));
                cmd.Parameters.AddWithValue("@Total_Amount", Convert.ToDouble(txttotalamount.Text));
                cmd.Parameters.AddWithValue("@Payment_Amount", Convert.ToDouble(txtpaymentamount.Text));
                cmd.Parameters.AddWithValue("@Payment_Type", txtpaymenttype.Text);
                if (txtbankname.Text == "")
                
                    cmd.Parameters.AddWithValue("@Bank_Name", bank);

                

                else
                
                    cmd.Parameters.AddWithValue("@Bank_Name", txtbankname.Text);
                


                if (txtchequeno.Text == "")
                
                    cmd.Parameters.AddWithValue("@Cheque_No", cheque);
                
                else
                

                    cmd.Parameters.AddWithValue("@Cheque_No", txtchequeno.Text);
                


                DateTime chequeDate;
                var value = (object)DBNull.Value;
                if (DateTime.TryParseExact(txtmaskchequedate.Text,"dd/MM/yyyy",null,System.Globalization.DateTimeStyles.None, out chequeDate))
                



                    value = chequeDate;
                    cmd.Parameters.AddWithValue("@Cheque_Date", value);  

                
                else
                

                    cmd.Parameters.AddWithValue("@Cheque_Date",(txtmaskchequedate.Text));  

                

                if (txtbillno.Text == "")
                
                    cmd.Parameters.AddWithValue("@Bill_No", billno);

                
                else
                
                    cmd.Parameters.AddWithValue("@Bill_No", txtbillno.Text);


                

                DateTime BillDate;
                var value1 = (object)DBNull.Value;
                if (DateTime.TryParseExact(txtmaskbilldate.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out BillDate))
                



                    value1 = BillDate;
                    cmd.Parameters.AddWithValue("@Bill_Date", value1);

                
                else
                

                    cmd.Parameters.AddWithValue("@Bill_Date", (txtmaskbilldate.Text));

                



                if (txtcodecreator.Text == "")
                
                    cmd.Parameters.AddWithValue("@Code_Create", codecreate);
                
                else
                
                    cmd.Parameters.AddWithValue("@Code_Create", txtcodecreator.Text.ToString());
                



                int n = cmd.ExecuteNonQuery();
                cnn.Close();
                if (n > 0)
                
                    MessageBox.Show("Data Inserted Successfully", "Data Inserted ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                

【问题讨论】:

【参考方案1】:

如果在您的文本框控件中输入了有效日期,您将签入。但是,如果不是,则无论如何都将文本框的内容用作参数值。 - 这肯定是不对的。

由于value 被初始化为DBNull,您可以在任何情况下添加参数,并且根本不需要代码的else 部分。 更改您的代码:

DateTime chequeDate;
var value = (object)DBNull.Value;
if (DateTime.TryParseExact(txtmaskchequedate.Text,"dd/MM/yyyy",null,System.Globalization.DateTimeStyles.None, out chequeDate))

    value = chequeDate;

cmd.Parameters.AddWithValue("@Cheque_Date", value);  

@Bill_Date 参数存在与从文本框中添加文本完全相同的问题,即使它是无效的。根据我的示例重写该参数的代码。

【讨论】:

我仍然遇到同样的异常我更改了这样的代码 DateTime chequeDate; var value = (object)DBNull.Value; if (DateTime.TryParseExact(txtmaskchequedate.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out chequeDate)) value = chequeDate; cmd.Parameters.AddWithValue("@Cheque_Date", value);我也为此设置了调试器,但调试器转到 cmd.Parameters.AddWithValue("@Cheque_Date", value);仅当蒙版文本框为空时此行 我在答案中测试了代码。它适用于两种情况。我认为您应该使用调试器逐步完成您的代码。应始终执行带有 ...Parameters.AddWithValue... 的行。 感谢您的回复,我也使用调试器,它总是在 cmd.Parameters.AddWithValue("@Cheque_Date", value);如果我输入日期值 DATA INSERT SUCCESSFULLY,我是否输入日期值,但如果我没有输入日期值,则给我例外 我在访问表中设置了shortdate格式,然后尝试运行你的代码,它运行完美我亲爱的朋友,非常感谢你的努力和帮助!!

以上是关于如何将空日期插入访问的主要内容,如果未能解决你的问题,请参考以下文章

将日期插入访问数据库

如何使用 C# 仅将日期(不包括时间)插入 ms 访问数据库

如何获取csv文本的值并插入访问

如何避免将空值插入主键或非空列?

在访问中插入日期

将日期值插入 MS 访问