在sql db中插入一个包含特殊字符的字符串'

时间:2012-08-08 15:15:54

标签: c# sql string

我想在sql表中插入一个可能包含'character的字符串。

我最好的方法是什么? 我应该在'之前插入\吗? 这是我在c#代码中的命令:

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

其中NewWorkspaceName可能包含'character,因此插入将导致异常。

感谢先进的哈达斯。

4 个答案:

答案 0 :(得分: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);
    .....
}

答案 1 :(得分: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 Engine内部参数 这将照顾报价等特殊字符 但是使用参数化查询可以获得另一个好处。您可以避免Sql Injection Attacks

答案 2 :(得分:1)

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

''是sql中的'

答案 3 :(得分:0)

你可以试试这个:

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

这会在数据库中保存“string To Database” 。然后在检索时

string OriginalText=Server.HtmlDecode(stringFromDatabase);