在C#中运行SQL命令时出现语法错误

时间:2018-04-08 06:12:45

标签: c# sql-server syntax-error

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)

1 个答案:

答案 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 typemy 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