2012-08-08 41 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

相关问题