【问题标题】:Ignoring Quotes in Insert String C#, SQL Server忽略插入字符串 C#、SQL Server 中的引号
【发布时间】:2020-10-25 11:19:52
【问题描述】:

我无法将 NULL 值插入数据库中的 Date 列,因为我需要使用字符串变量。

插入语句:

string insertQuery = "INSERT INTO PersonelListesi (id, ssk_tarih) VALUES(1,'" + sskTarihi + "')";

工作变量示例:

string sskTarihi = "20201212";

不正确的变量示例(我尝试过):

sskTarihi = "NULL";

System.Data.SqlClient.SqlException: '从字符串转换日期和/或时间时转换失败。'

sskTarihi = "'NULL'";

System.Data.SqlClient.SqlException: '关键字'NULL'附近的语法不正确

sskTarihi = "\"'NULL'\"";

System.Data.SqlClient.SqlException: '关键字'NULL'附近的语法不正确

sskTarihi = "\"NULL\"";

System.Data.SqlClient.SqlException: '从字符串转换日期和/或时间时转换失败。'

sskTarihi = "\'NULL\'";

System.Data.SqlClient.SqlException: '关键字'NULL'附近的语法不正确

sskTarihi = "\"\'NULL\'\"";

System.Data.SqlClient.SqlException: '关键字'NULL'附近的语法不正确

我希望你明白我的意思和我需要的。我很感激帮助。提前感谢您的回答。 :)

【问题讨论】:

  • 不要费心转义引号;只需use parameters。对于NULL,指定参数值DBNull.Value
  • 应避免字符串连接,以免语句容易被注入。
  • @BarbarosÖzhan 和 Dan,谢谢你们。

标签: c# sql-server sql-insert


【解决方案1】:

正如其他人推荐的那样,在方法驻留在类中的位置使用如下所示的参数。

public static void InsertRow(int id, string ssk_tarih)
{
    using (var cn = new SqlConnection {ConnectionString = "TODO"})
    {
        using (var cmd = new SqlCommand {Connection = cn})
        {

            cmd.CommandText = "INSERT INTO PersonelListesi (id, ssk_tarih) VALUES(@id,@ssk_tarih)";


            cmd.Parameters.Add("@Id", SqlDbType.Int).Value = id;

            if (string.IsNullOrWhiteSpace(ssk_tarih))
            {
                cmd.Parameters.Add("@ssk_tarih", SqlDbType.DateTime).Value = DBNull.Value;
            }
            else
            {
                cmd.Parameters.Add("@ssk_tarih", SqlDbType.DateTime).Value = ssk_tarih;
            }

            cn.Open();

            cmd.ExecuteNonQuery();

        }
    }

}

【讨论】:

  • cmd.Parameters.Add("@Id", SqlDbType.DateTime).Value = id; - 这应该可能SqlDbType.Int而不是日期时间......
  • @marc_s 这就是我在复制粘贴时得到的结果,感谢您指出这一点。
猜你喜欢
  • 2013-06-05
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
  • 2023-03-31
  • 1970-01-01
  • 2021-08-06
相关资源
最近更新 更多