如何在sql命令中插入当前日期时间

时间:2018-01-22 11:14:38

标签: c# sql-server ado.net

如何使用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'); 

3 个答案:

答案 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');