how to insert null date into access

二次信任 提交于 2019-12-25 04:35:29

问题


i want to insert null date into access database if user payment choose as cash then cheque date should be insert as empty for this im using masked textbox , i use debugger also but every time debugger going else condition and for that its giving me data mismatch exception here is im giving my insert code

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:


You check in if there is a valid date entered in your textbox control. But if it is not you use the content of the textbox as parameter value anyway. - This certainly is not right.

As value is initialized to DBNull, you can add the parameter in any case and don't need the else part of your code at all. Change your code:

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);  

The exact same problem with adding the text from textbox even though it is invalid, exists for the @Bill_Date parameter. Rewrite the code for that parameter according to my sample as well.



来源:https://stackoverflow.com/questions/36566423/how-to-insert-null-date-into-access

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!