【发布时间】:2017-07-29 18:56:51
【问题描述】:
我是一个 c# 的 n00b,已经使用 vba 有一段时间了。
我有这个代码:
OleDbCommand sqlcom = new OleDbCommand("UPDATE tblpack SET packeduser = 1 AND packeddate ='" + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + "' WHERE packid = " + packid, con);
我知道它没有参数化,这将是我的下一步,我现在真的只是在学习基础知识。
我的问题是没有日期部分,更新 sql 工作正常。
使用日期部分,没有错误,但 sql 最终不会触发。
我已停止执行非查询,并且 sql 看起来不错... 我在 Access 中的日期字段设置为空白,但我尝试过“一般日期”也没有运气。
有什么想法吗!?/
更新: 抱歉,你是 100% 正确的,即使是为了学习,我也不应该吝啬安全性。 我已经重写为参数化并且它正在工作。 我相信我在 SQL 中使用 AND 而不是 , 的问题(当时是凌晨 3 点)。 Datetime.now 实际上适用于 Access,而不必转换为字符串。我不知道为什么这会奏效..我已经阅读了很多关于需要转换的内容!
OleDbConnection con = new OleDbConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);
string strpacked = "UPDATE tblpack SET packeduser = 1, packeddate = ? WHERE packid = ?";
OleDbDataAdapter dataadapter = new OleDbDataAdapter();
OleDbCommand sqlcom = new OleDbCommand(strpacked, con);
sqlcom.Parameters.Add("?", OleDbType.Date, 5).Value = DateTime.Now;
sqlcom.Parameters.Add("?", OleDbType.Integer, 5).Value = packid;
dataadapter.SelectCommand = sqlcom;
con.Open();
sqlcom.ExecuteNonQuery();
row.Cells["clnpackeduser"].Value = "GA";
con.Close();
【问题讨论】:
-
将值作为参数传入,而不是使用字符串参数修改 SQL 字符串。
-
使用参数应该是your first step。
-
“我知道它没有参数化......我现在真的只是在学习基础知识。” - 使用参数化查询是基础之一。当您可以继续“做对”时,为什么还要浪费时间解决与“做错”相关的问题?