DateTime.Now在SQL中抛出异常,说它不是有效的日期时间值

waj*_*000 0 c# sql-server asp.net asp.net-mvc

我是ASP.NET的新手,我需要你的专家帮助来解决这个问题.我正在使用ASP.NET MVC 5和SQL Server.我尝试使用SQL将一些数据插入数据库,这是我的查询

INSERT INTO tem (Telephone, Status, CreateDate) 
VALUES ('" + telephone + "','"+ status +"','" + DateTime.Now + "');
Run Code Online (Sandbox Code Playgroud)

它在localhost中工作正常但在我部署到服务器后它显示一条错误消息:

将varchar数据类型转换为日期时间数据类型会导致超出范围的值.该语句已终止.

我的DateTime.Now价值就像28/02/2016 8:45:45 AM.

如果我通过硬编码添加2016-02-28 8:45:45 AM那么它正在工作.

mar*_*c_s 5

您需要使用参数化查询来解决SQL注入漏洞,并避免将您转换DateTime为经常导致问题的字符串.

使用这样的代码:

// define connection string and **PARAMETRIZED** insert query 
string connectionStirng = ".....";
string insertQry = "INSERT INTO tem (Telephone, Status, CreateDate) VALUES (@Telephone, @Status, @CreateDate);";

// set up connection and command in using blocks
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(insertQry, conn))
{
    // define the parameters
    cmd.Parameters.Add("@Telephone", SqlDbType.VarChar, 50).Value = telephone;
    cmd.Parameters.Add("@Status", SqlDbType.VarChar, 20).Value = status;
    cmd.Parameters.Add("@CreateDate", SqlDbType.DateTime).Value = DateTime.Now;

    // open connection, execute query, close connection
    conn.Open();
    int rowsInserted = cmd.ExecuteNonQuery();
    conn.Close();
}
Run Code Online (Sandbox Code Playgroud)