2015-01-17 5 views
1

오류가내가 SQL 서버 2008 데이터베이스에 데이터를 입력와 이상한 문제에 봉착

System.Data.SqlClient.SqlException가 처리되지 않은 HRESULT는 것을 저에게 말한다 = -2146232060 메시지 = '@comments'변수 이름이 이미 선언되었습니다. 변수 이름은 쿼리 일괄 처리 내에서 고유하거나 절차를 저장해야합니다. 스칼라 변수 "@employeeId"를 선언해야합니다.

문제는 ... 둘 다 선언했는데 뭔가 빠졌습니까?

public bool Addfix(DateTime receiveDate, int clientId, int modelID, string problem, string comment, int employeeId, float priceOffer, float price) 
{ 
     _cmd.CommandText ="INSERT INTO fixes(receiveDate, clientId, modelID, problem, comments, employeeId, priceOffer, price, returned) VALUES (@receiveDate, @clientId, @modelID, @problem, @comments, @employeeId, @priceOffer,@price,@returned);"; 
     _cmd.Parameters.Add("@receiveDate", SqlDbType.Date).Value = receiveDate; 
     _cmd.Parameters.AddWithValue("@clientId", clientId); 
     _cmd.Parameters.AddWithValue("@modelID", modelID); 
     _cmd.Parameters.AddWithValue("@problem", problem); 
     _cmd.Parameters.AddWithValue("@comments", comment); 
     _cmd.Parameters.AddWithValue("@employeeId", employeeId); 
     _cmd.Parameters.AddWithValue("@priceOffer", priceOffer); 
     _cmd.Parameters.AddWithValue("@price", price); 
     _cmd.Parameters.AddWithValue("@returned ", 0); 

     _con.Open(); 
     _cmd.ExecuteNonQuery(); 
     _con.Close(); 

     return true; 
    } 
+1

[AddWithValue()를 이미 사용 중지 할 수 있습니까?] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithue-already)를 확인하십시오. /)를 사용하고'.AddWithValue()'사용을 중지하십시오. 예기치 않은 놀라운 결과를 초래할 수 있습니다 ... –

+3

이 예외를 처음으로 제공합니까, 아니면이 메서드를 두 번째로 호출할까요? 'AddWithValue' 문제 외에도 명령을 재사용하려면 매개 변수를 지워야합니다 :'_cmd.Parameters.Clear()'. SqlCommand를 변환으로 재사용 할 때 [Parameters.Clear를 호출해야합니까?] (http://stackoverflow.com/questions/14374541/should-i-call-parameters-clear-when-reusing-a-sqlcommand-with)도 참조하십시오. - 전환). – CodeCaster

+0

@ CodeCaster 처음 시도 할 때 ... 작동하는지 확인하고 오류가 발생하는지 확인하기 위해 함수를 테스트하십시오. – Iakovl

답변

1

함수 정의를 보면 sqlcommand/sqlconnectin 개체가 클래스 수준이거나 전역 인 것으로 보입니다. 귀하의 경우에는 @comments 매개 변수가있는 _cmd 개체를 사용하고이 메서드를 실행하기 전에 지워지지 않았던 것으로 보입니다.글로벌 sqlcommand 및 sqlconnection 객체는 항상 사용하지 않는 것이 좋습니다.하지만 불가피한 이유로 전역 sql 명령을 사용해야하는 경우 명령 객체의 매개 변수를 지우는 것이 좋습니다. sqlcommandObject.Parameters.Clear().