c# - 用于在表中存储日期的字符串由于未知原因正在转换 int
问题描述
我正在尝试将日期作为字符串存储在表格中,但日期不断转换为与日期相关的负 4 位数字,我无法终生弄清楚我在哪里弄乱。请注意,我使用的是 C# 和 SQL Server 的组合
foreach(DataRow dr in dt.Rows)
{
int qty = 0;
string pname = "";
SqlCommand cmd3 = con.CreateCommand();
cmd3.CommandType = CommandType.Text;
cmd3.CommandText = "insert into order_item values('" + orderid.ToString() + "','" + dr["product"].ToString() + "'," +
"'" + dr["price"].ToString() + "','" + dr["qty"].ToString() + "','"+ dr["total"].ToString() + "')";
cmd3.ExecuteNonQuery();
qty = Convert.ToInt32(dr["qty"].ToString());
pname = dr["product"].ToString();
SqlCommand cmd6 = con.CreateCommand();
cmd6.CommandType = CommandType.Text;
cmd6.CommandText = "update stock set product_qty = product_qty - " + qty + " where product_name = '"+pname.ToString()+"'";
cmd6.ExecuteNonQuery();
// date keeps getting updated to negative 4 digit number which coordinates with the date. ex: 14-01-2020 is converting to -2007.
SqlCommand cmd7 = con.CreateCommand();
cmd7.CommandType = CommandType.Text;
**cmd7.CommandText = "update stock_over_time set product_qty = product_qty - " + qty + ", date_changed = " + date.ToString("dd-MM-yyyy") + "" +
" where product_name = '" + pname.ToString() + "'";**
cmd7.ExecuteNonQuery();
}
解决方案
眼前的问题是:
, date_changed = " + date.ToString("dd-MM-yyyy") + "
会变成
, date_changed = 15-01-2020
这是:-2006
,这是(因为日期的存储方式)1894 年 7 月的某个时间。
一个不好的解决方法是添加引号,但这是:不好- 它有一系列与国际化有关的问题(08-01 是 8 月 1 日吗?1 月 8 日?)、SQL 注入等。
正确的解决方法是始终使用参数。例如:
cmd7.CommandText = @"
update stock_over_time
set product_qty = product_qty - @qty,
date_changed = @date
where product_name = @pname";
但是,这需要您添加带有值的参数。
最简单的方法是使用 Dapper:
string pname = ...
int qty = ...
DateTime date = ...
con.Execute(@"
update stock_over_time
set product_qty = product_qty - @qty,
date_changed = @date
where product_name = @pname",
new { pname, qty, date });
注意:您的所有数据库访问都应该参数化,或者像上面那样,或者使用原始 ADO.NET,或者使用像 EF 等工具。不仅仅是这个地方;无处不在。
推荐阅读
- excel - 通过 VBA 将 Excel 图表放入 PowerPoint
- postgresql - 插入到选择嵌套选择(S)性能。庞大的工会选择
- python - Pytorch 批量矩阵-矩阵外积
- c# - 尝试在文件名中使用变量时出现“找不到路径的一部分”错误
- android - Android 设备稳定 - 仅在一个地方,但有时行驶公里数仍超过 2 公里
- wso2 - 如何从 RESTful API WSO2EI 6.2.0 中的 OnComplete AggregateMediator 获取属性?
- flutter - Flutter:如何在一定数量的索引后在gridview下添加其他小部件
- c - 如何在C中存储不同类型的数据?
- python - 如何删除字符串中的标点符号并在执行转换后重新插入
- javascript - 如何返回与局部变量具有相同属性名称和值的对象