2012-08-08 42 views
0

我想插入到一個SQL表可能包含字符的字符串。插入到SQL DB一個字符串,其中包含特殊字符'

我最好的辦法是什麼? 我應該在'之前插入\'嗎? 這裏是我的命令,在C#代碼:

SqlCommand myCommand = new SqlCommand(
    String.Format(
    "insert into ACTIVE.dbo.Workspaces_WsToRefile values({0},'{1}',getdate())", 
     folderId, 
     NewWorkspaceName), 
    myConnection); 

其中NewWorkspaceName可能含有「的性格,所以插入會導致此刻異常。

感謝先進的哈達斯。

+1

您可以使用'''' – dtsg 2012-08-08 15:17:14

+5

您**應**使用查詢中的參數! – 2012-08-08 15:17:55

+3

當心小鮑比桌子! – 2012-08-08 15:18:12

回答

6

您應該使用SqlParameter。 http://msdn.microsoft.com/en-us/library/yy6y35y8.aspx

string query = "insert into ACTIVE.dbo.Workspaces_WsToRefile values(@folderID, @newWorkSpace, @createDate)"; 

using(SqlCommand cmd = new SqlCommand(query, SqlConnection)) 
{ 

    SqlParameter param = new SqlParameter("@folderID", folderId); 
    param.SqlDbType = SqlDbType.Int; 
    cmd.Parameters.Add(param); 
    ..... 
} 
+0

謝謝,參數方法解決了這個問題! – dusm 2012-08-08 15:44:49

1
NewWorkspaceName= NewWorkspaceName.Replace("\'","\'\'"); 

'' 是'在SQL

2

你只有一個選擇,忘記一切。這樣

SqlCommand myCommand = new SqlCommand("insert into ACTIVE.dbo.Workspaces_WsToRefile" + 
             " values(@id, @space, getDate()", myConnection); 
myCommand.Parameters.AddWithValue("@id", folderId); 
myCommand.Parameters.AddWithValue("@space", NewWorkspaceName); 
myCommand.ExecuteNonQuery(); 

folderID和NewWorkspaceName使用參數化查詢,傳遞給SQL引擎內的參數。
這將照顧引號等特殊字符。
但是,使用參數化查詢可以獲得另一個好處。你避免Sql Injection Attacks

0

你可以試試這個:

string stringToDatabase=Server.HtmlEncode("կҤїАͻBsdҤїА"); 

這在你的數據庫 節省 'stringToDatabase'。然後,當retreiving

string OriginalText=Server.HtmlDecode(stringFromDatabase); 
+0

它必須是WebUtility.HtmlEncode(stringFromDatabase),否則它不起作用 – 2017-08-22 14:45:58

相關問題