【问题标题】:How can I insert a value into a table where the column contains special character?如何将值插入到列包含特殊字符的表中?
【发布时间】:2020-12-31 19:51:08
【问题描述】:

我想在 MsSql 数据表中插入一条记录。这是一件容易的事,但目标表包含特殊的命名列,例如: 不幸的是,我无法重命名该列,因为我不拥有该数据库。 我的代码因异常而失败:

using (SqlConnection conn = GetSqlConnection())
{
            SqlCommand cmd = CreateNewCmd(conn);
            cmd.CommandText = "INSERT INTO test VALUES(@mz,x)";
            cmd.Parameters.Add("@mz,x", System.Data.SqlDbType.Int).Value = 1;
            

            cmd.ExecuteNonQuery();
}

例外是:

',' 附近的语法不正确。

必须声明标量变量“@mz”。

问题当然出在逗号上。如何保护我的 sql 中的命令,或者如何将一条简单的记录插入到这个表中?

感谢您的帮助!

【问题讨论】:

  • 你为什么要把你的参数命名为@mz,x?您没有在代码中的任何位置指定列名。
  • 试试INSERT INTO test ([<"mz,x",int>]) VALUES(@mz)
  • 您混淆了列名和参数名。
  • 约翰,你是对的!不必在列名之后命名参数。如果 1 使用正常的参数名称,则系统可以将其插入到表中。
  • 你是对的家伙!谢谢!

标签: c# sql sql-server-2005


【解决方案1】:

我不知道你尝试使用的SQL syntax,但你可以写:

using (SqlConnection conn = GetSqlConnection())
{
  var cmd = CreateNewCmd(conn);
  cmd.CommandText = "INSERT INTO test VALUES (?,?,?)";
  cmd.Parameters.Add("@value1", System.Data.SqlDbType.Int).Value = 1;
  cmd.Parameters.Add("@value2", System.Data.SqlDbType.Int).Value = 1;
  cmd.Parameters.Add("@value3", System.Data.SqlDbType.Int).Value = 1;
  cmd.ExecuteNonQuery();
}

假设表 test 有 3 列作为样本,我们添加一行包含所有单元格,因此我们不需要像您在 值中所做的那样命名列谓词应该是参数名称(这里我们使用? 来避免一些不兼容)。

理想情况下,请求应该是:

INSERT INTO test (column1Name, column2Name, column3Name) VALUES (?,?,?)

如果数据库支持并且与 ADO.NET 提供者之间没有问题,您可以命名参数:

INSERT INTO test (column1Name, column2Name, column3Name) VALUES (@value1, @value2, @value3)

如果遇到异常,请像 .NET Framework 一样使用 ?

对于您的专栏特殊名称,我不知道,但您可以尝试@AnkitDas 的答案。

【讨论】:

  • 请不要建议在不指定列列表的情况下编写插入语句:(
  • @Arvo Not false... 我写了这个答案,但对结构一无所知,特别是指出命名列代替值的问题。似乎没有很清楚地提及。
【解决方案2】:

您可能希望将列名括在方括号中:[mz,x]

而且我认为您不需要将变量声明为“@mz,x”。而只是简单地将其声明为 mz 以便在 C# 代码中使用它。

using (SqlConnection conn = GetSqlConnection())
{
            SqlCommand cmd = CreateNewCmd(conn);
            cmd.CommandText = "INSERT INTO test([mz,x]) VALUES(@mz)";
            cmd.Parameters.Add("@mz", System.Data.SqlDbType.Int).Value = 1;
            

            cmd.ExecuteNonQuery();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 2023-03-10
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多