如何将日期时间存储到sql数据库中
本文关键字:sql 数据库 存储 时间 日期 | 更新日期: 2023-09-27 18:08:37
当我尝试将日期保存到sql数据库
时,我得到这个异常SQL语句:将表达式转换为数据类型时发生算术溢出错误datetime。
语句已被终止。
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_deliveryDate
和dp_expiryDate
是日期选择字段,具有自定义日期格式dd/MM/yyyy
** -
po_deliveryDate
和po_expiryDate
列的datetime数据类型为
您应该从日期选择器中提取选定的日期,而不是文本
指定参数类型:
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对象,这样就可以在数据库中读取和执行针对它的复杂查询。