2012-11-19 6 views
0

wpf 응용 프로그램 실제로 계정 응용 프로그램을 만들려면 디스플레이 열기 amt 갔다. dr_amt-cr_amt와 같은 amt를 여는 것. 내가 어떻게 할 수있는 내가 할당되지 않은 지역 variable'a '와'B '의 오류를 사용하여 볼이 코드를 bulid에서 내가런타임에 할당되지 않은 로컬 변수 사용

double a, b, c; 

SqlConnection con = new SqlConnection("my conn"); 

SqlCommand cmd = new SqlCommand("select sum(dr_amt),sum(cr_amt) from amt where id='"+tex1.Text+"'", con); 


con.Open(); 

SqlDataReader dr = cmd.ExecuteReader(); 

while (dr.Read()) 

{ 
    a = Convert.ToDouble(dr[0]); 
    b = Convert.ToDouble(dr[1]); 
} 
c = a - b; 

textBox3.Text =Convert.ToString(c); 

을 수행 할 수 있습니다에 대한 dr_amt 및 cr_amt가 AMT 테이블의 열 이름

답변

2

bulid에서이 코드에 오류가 있습니다. 할당되지 않은 지역 변수 'a '와'b '를 사용합니다.

예. 가능합니다. 귀하의 while 루프가 실행되지 않을 수 있기 때문에 그들은 정확하게 할당되지 않았습니다.

행이 없으면 어떤 결과가 나타 납니까? 그 질문에 대한 답은 당신이해야 할 일을 결정할 것입니다.

double a = 0, b = 0, c; 
: 예를 들어,

당신은 은 그들에게 시작하는 값을 줄 수 - (? 의도적 인 것입니다 이상의 행이 있다면 또한, 마지막 행은 결과에 기여)

행이 없으면 결과가 0입니다. 그 ... 당신이 원하는

을 있다면 (내가 늦게 할 수있는 한, 당신을 마음 변수를 선언 할 것입니다.)

또한, 제발 사용하는 매개 변수가있는 SQL을. 현재 코드는 SQL injection attacks에 취약합니다. 아, using 문을 사용하여 명령과 예외를 적절히 닫아야합니다.

+0

존의 제안 [자신의 블로그에 제프 앳 우드]에 의해 설명된다 ((코드의 SQL 주입 취약점 관련) http://www.codinghorror.com/blog/2005/04/give-me-parameterized -sql-or-give-me-death.html). 그의 조언을 따르십시오! –

+0

도움을위한 코드를 쓸 수 있습니까 – user1464596

+0

@ user1464596 : 글쎄요, 당신에게 * 하나의 코드 조각을주었습니다 ... 그러나 정말로 당신은 그 조언을주의 깊게 읽고 나서 직접 따라야합니다. 방금 코드를 숟가락으로 먹이면 다음에 배울 가능성이 줄어 듭니다. –

0

dr에 데이터가 없을 때 while 루프가 하나의 반복을 실행하지 않기 때문에 a와 b를 설정해야합니다.

double a = 0, b = 0, c; 
관련 문제