gpt4 book ai didi

c# - 用于在表中存储日期的字符串由于未知原因正在转换为 int

转载 作者:行者123 更新时间:2023-12-02 03:47:37 25 4
gpt4 key购买 nike

我试图将日期作为字符串存储在表中,但日期不断转换为与日期相关的负 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();
}

enter image description here

最佳答案

当前的问题是:

    , date_changed = " + date.ToString("dd-MM-yyyy") + "

将成为

    , date_changed = 15-01-2020

即:-2006,这是(由于日期的存储方式)1894 年 7 月的某个时间。

对此的一个修复方法是添加引号,但这是: - 它有一系列与国际化有关的问题(08-01 8 月 1 日?1 月 8 日?)、SQL 注入(inject)等

正确的修复方法是始终使用参数。例如:

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 等工具。不仅仅是这一处; 无处不在

关于c# - 用于在表中存储日期的字符串由于未知原因正在转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59753570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com