2013-12-17 5 views
1

이전 개발자 코드를 수정 중이며 업데이트 구문에서 매개 변수를 사용하지 않는 것으로 나타났습니다. 나는 주입에 대해 더 안전하도록 매개 변수를 사용하여 수정했으며 이제는 전혀 업데이트되지 않습니다. 이전 코드로 업데이트되었습니다. 코드는 잘 진행됩니다. 오류는 없지만 테이블을 업데이트하지는 않습니다. 디버깅 중 값이매개 변수가있는 SQLCommand가 더 이상 내 테이블을 업데이트하지 않습니다.

csharpa="Hello" 
csharpb="Text" 
csharpc="1" 

으로 표시되는 경우

select * from table where sqlb="Text" and sqlc="1" 

의 테이블을 확인 아직도 내가 기대하는 것처럼 안녕하세요으로 업데이트되지

sqla="Goodbye" 

의 이전 값을가집니다.

코드 전에 :

string q = "update table set sqla='" + 
    csharpa + "' where sqlb='" + csharpb + 
    "' and sqlc=" + (string)HttpContext.Current.Session["csharpc"]; 
SqlConnection conn = new SqlConnection(connstr); 
SqlCommand sda = new SqlCommand(q, conn); 
conn.Open(); 
sda.ExecuteNonQuery(); 
conn.Close(); 

코드 후 :

string q = "update table set [email protected] where [email protected] and [email protected]"; 
필드가 문자열 인 경우 귀하의 DB를 자동으로 알 수

, 당신 때문에 돈 :

string q = "update table set sqla='@para' where sqlb='@parb' and [email protected]"; 
SqlConnection conn = new SqlConnection(connstr); 
SqlCommand sda = new SqlCommand(q, conn); 
sda.Parameters.AddWithValue("@para", csharpa); 
sda.Parameters.AddWithValue("@parb", csharpb); 
sda.Parameters.AddWithValue("@parc", (string)HttpContext.Current.Session["csharpc"]); 

답변

3

는 따옴표를 제거 무엇이든 따옴표로 묶어야합니다.

+0

그러나 그게 효과가 있었는데, 하나의 잡았다. 단일 어포 스트로피와 같은 주사 공격을 일으킬 수있는 것들 중 하나를 입력하면 테이블을 업데이트하지 않습니다. 매개 변수가 이것들을 벗어날 정도로 똑똑하지 않은가? 먼저 몇 가지 이스케이프 시퀀스를 통해 실행해야합니까? –

+0

@JohnWesleyGordon - 따옴표에서 벗어나서는 안됩니다. 아마도 다른 것이 문제일까요? 동일한 WHERE 절을 사용하여 SELECT 문을 실행하고 결과가 반환되는지 확인하려고합니다. –

+0

그것은 내 자신의 어리 석음이었다. 아포 스트로피를 테스트 할 때 이전 버전을 사용했습니다. 매개 변수와 함께 작동하는지 확인했습니다. 모든 도움에 감사드립니다. –

2

매개 변수화 된 문에 작은 따옴표가 필요하지 않습니다.

변경이 줄이에

string q = "update table set sqla='@para' where sqlb='@parb' and [email protected]"; 

:

string q = "update table set [email protected] where [email protected] and [email protected]"; 

귀하의 sda.Parameters.AddWithValue 호출이 값이 문자열 있음을 평가하고, 당신이 매개 변수 주위에 따옴표를 넣지 않아도 정확하게 전달합니다 .