cmd = new SqlCommand("Select Max(Date_Time) From Daily_Sale ", con); cmd.ExecuteNonQuery();
string date_tim = (string)cmd.ExecuteScalar();
MessageBox.Show("date time" + date_tim);
这会在消息框中显示日期时间,但是当我调用此查询时:
cmdc = new SqlCommand("Select Total_Sale from Daily_Sale Where Date_Time ="+ date_tim,con);
cmdc.ExecuteNonQuery();
我收到语法错误。
Date_Time
保存为nvarchar(50)
。
答案 0 :(得分:2)
首先,您需要使用参数将数据发送到SQL。永远不要将数据字符串连接到SQL语句。这是一个安全漏洞,因为它是SQL注入攻击的一扇门 有关详细信息,请参阅How can prepared statements protect from SQL injection attacks?和Microsoft文档 - How to: Perform Parameterized Queries
其次,永远不要将日期存储为数据库中的字符串。对于仅限日期的值,请使用Date
数据类型。对于仅限时间值,请使用Time
数据类型。对于日期和时间值,请使用DateTime2
数据类型(why not use DateTime
?)
有关更多信息,请阅读Aaron Bertrand的Bad habits to kick : choosing the wrong data type和my answer,了解至this question.
第三,您不需要两个查询来从数据库中获取total_sale的最后一个值。您可以在单个查询中执行此操作,而根本不需要任何参数:
SELECT TOP 1 Total_Sale
FROM Daily_Sale
ORDER BY Date_Time DESC
如果您还想要日期时间值,只需将其添加到查询中:
SELECT TOP 1 Total_Sale, Date_Time
FROM Daily_Sale
ORDER BY Date_Time DESC