如何使用ado.net sql命令插入当前时间。收到错误说"将varchar数据类型转换为日期时间数据类型会导致超出范围的值。"
码
DateTime NowTime = DateTime.Now;
string usecase = "manhole";
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString);
con.Open();
SqlCommand cmdInsert = new SqlCommand("insert into sms values('" + usecase + "','" + smsbody + "','" + NowTime + "')", con);
try
{
cmdInsert.ExecuteNonQuery();
}
columns
updtd_date is datetime
query
INSERT INTO sms (usecase, sms, updtd_date)
VALUES ('manhole','level is low at : 22/01/2018 15:56:20','22/01/2018 16:18:28');
答案 0 :(得分:2)
您应该使用参数化查询而不是连接字符串,您正在做的是要求SQL注入。此外,您应该在使用它们之后处置命令和连接以释放内存。
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString))
{
using (var command = new SqlCommand("insert into sms (col1) values(@col1"))
{
command.Parameters.AddWithValue("@col1", DateTime.Now);
con.Open();
command.ExecuteNonQuery();
}
}
答案 1 :(得分:0)
使用函数GETDATE()
获取系统日期和时间。
更改NowTime
"insert into sms values('" + usecase + "','" + smsbody + "','" + NowTime + "')"
到此
"insert into sms values('" + usecase + "','" + smsbody + "',GETDATE())"
执行这样的SQL语句会导致SQL注入,所以我推荐使用参数可能是这样的东西
using (SqlConnection con = new SqlConnection(dc.Con)) {
using (SqlCommand cmd = new SqlCommand("insert into sms values(@usecase,@smsbody,GETDATE())", con)) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@usecase", SqlDbType.VarChar).Value = usecase;
cmd.Parameters.Add("@smsbody", SqlDbType.VarChar).Value = smsbody;
con.Open();
cmd.ExecuteNonQuery();
}
}
答案 2 :(得分:0)
如果您在不使用参数的情况下插入日期,我认为您需要特定于SQL中的日期格式:
string nowDate = DateTime.Now.ToString("dd MMM yyy HH:mm:ss");
string sql = "insert into @dateT values('"+nowDate+"')";
这导致我的电脑
插入@dateT值(' 2018年1月22日13:27:04');