如何在 C# 中执行包含带有“-”、“\”或“;”的字符串的 TSQL 输入命令
Posted
技术标签:
【中文标题】如何在 C# 中执行包含带有“-”、“\\”或“;”的字符串的 TSQL 输入命令【英文标题】:How to execute a TSQL input command in C# which includes a string with "-", "\" or ";"如何在 C# 中执行包含带有“-”、“\”或“;”的字符串的 TSQL 输入命令 【发布时间】:2013-06-10 21:07:07 【问题描述】:我有一个 SqlCommand 尝试在 SQL Server 数据库表中插入一行。感兴趣的列是一个nvarchar(100),需要输入的数据会包含“-”、“;”等字符和 ”\”。当我插入一个没有这些字符的字符串时,一切正常。当我尝试插入包含这些字符的字符串时,代码会失败,因为这些字符被代码从字面上理解,因此会报告语法错误。我已经使用动态 sql 单独在 TSQL 中解决了这样的问题,但是我找不到任何好的参考来在 C# 中执行此操作。我想我可以创建一个存储过程并传递值,但是有没有一种方法可以单独使用 C# 有效地执行此操作?如果是这样,如何?还是将值传递给存储过程是更好的方法?
下面是简化版的代码:
String SQLServerInstanceNames = "ussqlclus-db43\ussqlclusdb43; ussqlclus-db44\ussqltrysdb44; ussqltrys-db45\ussqltrysdb45;"
//Create Connection (Get Connection string from Server Explorer)
SqlConnection myConnection = new SqlConnection("Data Source=SERVER1;Initial Catalog=Database1;Integrated Security=True");
//Open connection
try myConnection.Open();
catch (Exception e) Console.WriteLine(e.ToString());
SqlCommand myCommand = new SqlCommand("INSERT INTO [dbo].[Table1]" +
"([SQLServerInstanceNames])" +
"VALUES (SQLServerInstanceNames);", myConnection);
//Execute command
myCommand.ExecuteNonQuery();
//Close connection
try myConnection.Close();
catch (Exception e) Console.WriteLine(e.ToString());
【问题讨论】:
你需要使用参数。 参数化查询 FTW! 我最近看到了更多的 SQL 参数化问题。奇怪... 您从哪里获得连接打开代码?如果有异常,则在控制台上报告异常,然后继续尝试使用连接?完全没有try
/catch
块会好得多。
【参考方案1】:
试试SqlParameters。它将使您免于 Sql Injection 以及您当前的问题。
myCommand.Parameters.AddWithValue("@param1", myValueWithCharacters);
【讨论】:
【参考方案2】:C# 使用\
作为控制字符。您可以通过在字符串前面加上 @
字符来忽略这些:
String SQLServerInstanceNames = @"ussqlclus-db43\ussqlclusdb43; ussqlclus-db44\ussqltrysdb44; ussqltrys-db45\ussqltrysdb45;"
【讨论】:
【参考方案3】:只需像这样更新您的代码以在 INSERT 语句中包含参数
SqlCommand myCommand = new SqlCommand("INSERT INTO [dbo].[Table1]" +
"([SQLServerInstanceNames])" + "VALUES (@SQLServerInstanceNames);", myConnection);
myCommand.Parameters.AddWithValue("@SQLServerInstanceNames", "instance name");
请注意,我更新了 VALUES 部分并添加了@SQLServerInstanceNames——这是您向查询添加参数的方式。
现在您可以使用参数了,您不必担心特殊字符。这些将被自动处理。
【讨论】:
以上是关于如何在 C# 中执行包含带有“-”、“\”或“;”的字符串的 TSQL 输入命令的主要内容,如果未能解决你的问题,请参考以下文章