Rob*_*ert -1 c# sql-server asp.net-mvc datetime
我有两个SQL查询字符串,其中一个有效,另一个没有.
工作人员:
string updateLoginTime = "UPDATE DeviceUsers SET lastLogin = '" + dateTime + "' WHERE ID = '" + userID + "'";
Run Code Online (Sandbox Code Playgroud)
这个没有:
string updateText = "UPDATE DocumentsRead SET timeRead = '" + dateTime + "' WHERE userID = '" + userID + "' AND fileName = '" + fileOnly +"'";
Run Code Online (Sandbox Code Playgroud)
它抛出一个错误:
将varchar数据类型转换为日期时间数据类型会导致超出范围的值.
在两个查询中,dateTime参数都作为字符串传递给Web方法.任何想法为什么第一个工作,但第二个不工作?
-编辑-
第二个查询现在格式如下:
dateTime = DateTime.Now.ToString("dd-MM-yy HH-mm-ss");
using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["EndUsersConnectionString"].ConnectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "UPDATE DocumentsRead SET timeRead = @timeRead WHERE userID = @userID AND fileName = @fileName";
cmd.Parameters.AddWithValue("@timeRead", dateTime);
cmd.Parameters.AddWithValue("@userId", userID);
cmd.Parameters.AddWithValue("@fileName", fileName);
cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
仍然得到同样的错误.
Dar*_*rov 10
永远不要那样做.切勿使用字符串连接来构建SQL查询.如果您不想满足,请始终使用参数化查询Bobby Tables:
using (var conn = new SqlConnection(someConnectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "UPDATE DocumentsRead SET timeRead = @timeRead WHERE userID = @userID AND fileName = @fileName";
cmd.Parameters.AddWithValue("@timeRead", someDateTimeInstance);
cmd.Parameters.AddWithValue("@userId", userId);
cmd.Parameters.AddWithValue("@fileName", fileName);
cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
这样,您不仅不会遇到Bobby Tables,而且您的查询也能正常运行.
在进行SQL开发时应该遵守的黄金法则绝不会使用+运算符.
| 归档时间: |
|
| 查看次数: |
832 次 |
| 最近记录: |