如何将日期时间存储到sql数据库中

本文关键字:sql 数据库 存储 时间 日期 | 更新日期: 2023-09-27 18:08:37

当我尝试将日期保存到sql数据库

时,我得到这个异常

将表达式转换为数据类型时发生算术溢出错误datetime。
语句已被终止。

SQL语句:
SqlCommand cmd = new SqlCommand("insert into tbl_purshaseOrders (po_currency,po_paymentTerms,po_deliverydate,po_projectId,po_supplierId,po_notes,po_expiryDate) values (@po_currency,@po_paymentTerms,@po_deliverydate,@po_deliverydate,@po_projectId,@po_notes,@po_expiryDate)", conn);
cmd.CommandType = CommandType.Text;
MessageBox.Show("" + dp_deliveryDate.Text);
cmd.Parameters.AddWithValue("@po_currency", CB_currency.Text);
cmd.Parameters.AddWithValue("@po_paymentTerms", T_paymentTerms.Text.Trim());
cmd.Parameters.AddWithValue("@po_deliverydate", dp_deliveryDate.Text);
cmd.Parameters.AddWithValue("@po_expiryDate", dp_expiryDate.Text);
cmd.Parameters.AddWithValue("@po_projectId", Int32.Parse(T_project.Text.Trim()));
cmd.Parameters.AddWithValue("@po_supplierId", Int32.Parse(T_supplier.Text.Trim()));
cmd.Parameters.AddWithValue("@po_notes", T_notes.Text.Trim());
int val = cmd.ExecuteNonQuery();
if (val > 0)
{
   MessageBox.Show("Added Successfully ", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign | MessageBoxOptions.RtlReading);
   // resetFields();
   GetDate();
} 
  • dp_deliveryDatedp_expiryDate是日期选择字段,具有自定义日期格式dd/MM/yyyy **
  • po_deliveryDatepo_expiryDate列的datetime数据类型为

如何将日期时间存储到sql数据库中

您应该从日期选择器中提取选定的日期,而不是文本

指定参数类型:

cmd.Parameters.Add("@ParameterName", SqlDbType.DateTime).Value = "9/15/2011 11:30 AM";

修改完代码后,检查一下:-

enter code hereSqlCommand cmd = new SqlCommand("insert into tbl_purshaseOrders (po_currency,po_paymentTerms,po_deliverydate,po_projectId,po_supplierId,po_notes,po_expiryDate) values (@po_currency,@po_paymentTerms,@po_deliverydate,@po_deliverydate,@po_projectId,@po_notes,@po_expiryDate)", conn);
            cmd.CommandType = CommandType.Text;
            MessageBox.Show("" + dp_deliveryDate.Text);
            cmd.Parameters.AddWithValue("@po_currency", CB_currency.Text);
            cmd.Parameters.AddWithValue("@po_paymentTerms",T_paymentTerms.Text.Trim());
            cmd.Parameters.AddWithValue("@po_deliverydate",Convert.ToDateTime(dp_deliveryDate.Text).toLongDateString());
            cmd.Parameters.AddWithValue("@po_expiryDate", dp_expiryDate.Text);
            cmd.Parameters.AddWithValue("@po_projectId", Int32.Parse(T_project.Text.Trim()));
            cmd.Parameters.AddWithValue("@po_supplierId", Int32.Parse(T_supplier.Text.Trim()));
            cmd.Parameters.AddWithValue("@po_notes", T_notes.Text.Trim());
            int val = cmd.ExecuteNonQuery();
            if (val > 0)
            {
                MessageBox.Show("Added Successfully ", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign | MessageBoxOptions.RtlReading);
               // resetFields();
                GetDate();
            } 

这可能是日期格式的问题,也检查发送值格式与列中提到的相同。

数据库不支持这种日期格式。解析.NET代码中的字符串:

DateTime deliveryDate = DateTime.ParseExact(dp_deliveryDate.Text, "dd'/'MM'/'yyyy", CultureInfo.InvariantCulture);

然后使用参数中的DateTime值:

cmd.Parameters.AddWithValue("@po_deliverydate", deliveryDate);

如果您只是在c#中查看日期时间,您可以将日期时间存储为Ticks(参见DateTime.Ticks)。不过,最好将DateTime存储为SQL DateTime对象,这样就可以在数据库中读取和执行针对它的复杂查询。