c# - C#:当列名包含空格和特殊字符时参数化 SQL 插入语句
问题描述
我有一个 SQL Server 数据库,其中包含带有空格和特殊字符的列名。仅出于演示目的,假设这些列名如下...
- 商品编号
- 物品名称
- 商品价格
过去我在将数据插入 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();
}
解决方案
听起来你正在尝试做这样的事情:
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;
推荐阅读
- authentication - Google Analytics API:“错误 403 - 用户对此网络媒体资源没有足够的权限。”
- javascript - 尝试使用字符串访问点符号变量
- c# - C# :OnvifClientPTZ
- oauth-2.0 - Azure AD B2C 是否支持 OAuth 2.0 SAML 不记名断言流?
- payment-gateway - 如何在 razorpay 支付过程中禁用手机、电子邮件
- c# - 在对依赖于它的标记扩展进行单元测试时,如何设置 StaticResourceExtension?
- javascript - 'npm run test' 有效,但 'jest --coverage' 命令不起作用
- excel - 从 Excel 中打开访问表单中的特定记录
- java - 如何在值 90 后使子字符串 +1
- redis - 如果 redis 是单线程的,为什么我们需要 redis 中的 eval 命令?