2012-08-08 3 views
0

을 포함하는 문자열을 삽입합니다.'문자가 포함될 수있는 문자열을 SQL 테이블에 삽입하려고합니다.sql db에 특수 문자 '

이렇게하는 가장 좋은 방법은 무엇입니까? 앞에 @를 삽입해야합니까?

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

NewWorkspaceName가 '문자가 포함되어있을 경우, 그래서 삽입 순간에 예외가 발생합니다 여기에 C# 코드 내 명령입니다.

감사합니다. hadas.

+1

012를 사용할 수 있습니다. – dtsg

+5

** 쿼리에 매개 변수를 사용해야합니다! –

+3

작은 바비 테이블을 조심하십시오! –

답변

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

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

당신이 시도 할 수 있습니다 피하기 :이 데이터베이스 에 'stringToDatabase을'저장

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

. 그런 다음 수령하는 동안

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

WebUtility.HtmlEncode (stringFromDatabase) 여야합니다. 그렇지 않으면 작동하지 않습니다. –