簡體   English   中英

如何在C#中執行TSQL輸入命令,該命令包含帶有“-”,“ \\”或“;”的字符串

[英]How to execute a TSQL input command in C# which includes a string with “-”, “\” or “;”

我有一個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()); }

嘗試使用SqlParameters 它將使您免受Sql Injection以及當前問題的困擾。

myCommand.Parameters.AddWithValue("@param1", myValueWithCharacters);

C#使用\\作為控制字符。 您可以通過在字符串前面添加@字符來忽略它們:

String SQLServerInstanceNames = @"ussqlclus-db43\ussqlclusdb43; ussqlclus-db44\ussqltrysdb44; ussqltrys-db45\ussqltrysdb45;"

只需像這樣更新代碼,即可在INSERT語句中包含參數

SqlCommand myCommand = new SqlCommand("INSERT INTO [dbo].[Table1]" + 
        "([SQLServerInstanceNames])" + "VALUES (@SQLServerInstanceNames);", myConnection);
    myCommand.Parameters.AddWithValue("@SQLServerInstanceNames", "instance name");

注意,我更新了VALUES部分並添加了@SQLServerInstanceNames –這是將參數添加到查詢中的方式。

現在,您可以使用參數,而不必擔心特殊字符。 這些將被自動處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM