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

我正在尝试获取日期以字符串形式存储在表中,但是日期一直转换为与日期相关的负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();
}

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

参考方案

直接的问题是:

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

会变成

    , date_changed = 15-01-2020

这是:-2006,它是(由于存储日期的原因)在1894年7月的某个时间。

一个不好的解决方法是添加引号,但这是:不好-它与国际化(是8月1日是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之类的工具进行参数化。到处。

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …

如何在Wiremock中为JUNIT匹配精确的json - java

我正在使用Wiremock在Spring启动应用程序中模拟Junit的REST服务。我的问题是,我无法匹配多个匹配模式。 Junit.javaStringValuePattern pattern = WireMock.matching(".*"); givenThat(post(urlEqualTo("/softwares�…

改进SQL INSERT查询以避免SQL注入 - python

我正在使用pymyql / mysql-connector将消息写入mysql数据库。消息是在mqtt broker的回调(paho.mqtt回调)上处理的。我有4个不同的表,并且根据消息类型,我正在将消息插入数据库。我写了如下的插入查询。这种写法似乎导致sql注入。任何建议如何改善插入查询语句?# callback attached to paho.mqt…

如何在JQuery中操作JSONArray - javascript

我有一个php函数,它以JSON返回此代码{"0":{"title":"Dans l\u2019appartement"},"1":{"title":"A l\u2019a\u00e9roport - D\u00e9part de B\u00e9at…