首页 > 解决方案 > C#:当列名包含空格和特殊字符时参数化 SQL 插入语句

问题描述

我有一个 SQL Server 数据库,其中包含带有空格和特殊字符的列名。仅出于演示目的,假设这些列名如下...

  1. 商品编号
  2. 物品名称
  3. 商品价格

过去我在将数据插入 SQL Server 时使用了 SQL 参数;但是,当我现在尝试用括号括住包含特殊字符的参数名称时,我得到一个异常

System.Data.SqlClient.SqlException:''nvarchar' 附近的语法不正确。必须声明标量变量“@”。

如果数据库表列名包含空格和特殊字符,是否可以在 C# 中创建参数化查询?

SqlConnectionStringBuilder builder = new 
SqlConnectionStringBuilder();
builder.DataSource = "[My Server Name]";
builder.UserID = "[My User ID]";
builder.Password = "[My Password]";
builder.InitialCatalog = "[My Database Name]";
string tableName = "dbo.test_GroceryList";
string columns = "[Item ID],[Item's Name],[Price, of Item]";
string values = "@[Item ID],@[Item's Name],@[Price, of Item]";
string sqlCommandInsert = string.Format("INSERT INTO {0}({1} VALUES({2})", tableName, columns, values);  
using (var con = new SqlConnection(builder.ConnectionString))
using (var cmd = new SqlCommand(sqlCommandInsert, con))
{
  con.Open();
 cmd.Parameters.Clear();
 cmd.Parameters.AddWithValue("@[Item ID]", "1");
 cmd.Parameters.AddWithValue("@[Item's Name]", "Milk");
 cmd.Parameters.AddWithValue("@[Price, of Item]", "1.99");
 cmd.ExecuteNonQuery();
}

标签: c#sql-serverinsertprepared-statement

解决方案


听起来你正在尝试做这样的事情:

int retVal = 0;
string sql = @"SELECT [sold]
                  FROM [some_datebase].[dbo].[nvdr_sales]
                  WHERE [store id] = @store_id
                  AND [report date] = @report_date;";
using (SqlConnection connection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]))
using (SqlCommand cmd = new SqlCommand(sql, connection))
{
    cmd.Parameters.AddWithValue("@store_id", d.id);
    cmd.Parameters.AddWithValue("@report_date", date);
    connection.Open();
    using (var reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            retVal = reader.GetInt32(reader.GetOrdinal("sold"));
        }
    }
    connection.Close();
}
return retVal;

推荐阅读