错误:从字符串.net SQL Server转换日期时间时,转换失败

本文关键字:转换 日期 时间 失败 Server 字符串 net SQL 错误 | 更新日期: 2023-09-27 18:03:26

我意识到这个问题以前已经问过了,但是在经过之前回答的问题之后,我仍然不能完全弄清楚这段代码有什么问题。

顺便告诉你,我在英国。

   public static void GetDataForCSEP(string viewName, string schemaName, 
                                             string dateFieldName, DateTime startDate, DateTime endDate)
        {
            string dateFormat = "yyyy/MM/dd HH:mm:ss";

            //Connect to SQl Server 
            string commandText = "SELECT * FROM " + schemaName + "." + viewName + " WHERE @dateFieldName BETWEEN @startDate AND  @endDate";

            using (SqlCommand sqlCmd = new SqlCommand(commandText,sql_Conn))
            {
                sqlCmd.CommandType = CommandType.Text;
                sqlCmd.Parameters.Add("@dateFieldName",SqlDbType.NVarChar, 30).Value = dateFieldName;
                sqlCmd.Parameters.Add("@startDate", SqlDbType.DateTime).Value = DateTime.Parse(startDate.ToString(dateFormat));
                sqlCmd.Parameters.Add("@endDate", SqlDbType.DateTime).Value = DateTime.Parse(startDate.ToString(dateFormat));

                sql_Conn.Open();
                sqlCmd.ExecuteNonQuery();

            }
}

错误:从字符串.net SQL Server转换日期时间时,转换失败

错误是不能传递列名作为参数

    "SELECT * FROM " + schemaName + "." + viewName + " 
WHERE @dateFieldName BETWEEN @startDate AND  @endDate";

应该是

    "SELECT * FROM " + schemaName + "." + viewName + " 
WHERE " + dateFieldName  + " BETWEEN @startDate AND  @endDate";

为了避免sqlInjection攻击,使用Sp_executeSQL来执行这种类型的查询,因为这是动态sql查询

这将取决于您的SQL Server区域设置,但也许

string dateFormat = "dd-MMM-yyyy HH:mm:ss";

对你有用吗?