쿼리 문자열을 채울 매개 변수를받는 "InsertEmpolyee"라는 함수가 있습니다. 문제는 이러한 변수 중 일부를 선택적으로 만들고 싶습니다. 즉, 매개 변수에 값을 전달하지 않고 함수를 호출하고 데이터베이스에 NULL을 삽입하여 올바른 쿼리 문자열을 만들 수 있기를 바랍니다. 쿼리 문자열에 NULL 값 전달
이
는 함수 InsertEmployeepublic int InsertEmployee(string FirstName, char Minit, string LastName, int SSN
, int? Salary)
{
string query = "INSERT INTO Employee (Fname, Minit, Lname, SSN, Salary) " + "Values ('" + FirstName + "','" + Minit + "','" + LastName + "'," + Salary + ");";
return model.ExecuteNonQuery(query);
}
입니다 그리고 여기에 내가 전화하는 방법입니다.
int res = Controlobj.InsertEmployee(txtbox_FirstName.Text, txtbox_Minit.Text[0],
txtbox_LastName.Text, Int32.Parse(txtbox_SSN.Text), null);
나는 다음과 같은
if (!Salary.HasValue)
Salary = DBNull.Value;
을하려고 노력하지만 나에게 다음과 같은 오류 준다 "암시 system.DBNull는 int로 변환 할 수 없습니다를?"
어떻게 해결할 수 있습니까? 그리고 이것을 할 수있는 더 좋은 방법이 있습니까?
쿼리에 문자열 연결을 사용하지 말고 대신 매개 변수화 된 쿼리를 사용하십시오. 이렇게하면 코드가 SQL 삽입 공격에 취약하지 않게됩니다. 또한 들어오는 매개 변수 중 하나가'null' 일 때 매개 변수 값으로'System.DBNull.Value'를 전달할 수 있기 때문에 문제를 해결할 것입니다. – Igor
'model'은'SqlCommand'의 인스턴스입니까? – Igor
@Igor 아니요, 제가 작성한 수업입니다. 나는 매개 변수화 된 쿼리에 대해 읽을 것이다. 사실 나는 문자열 연결이 SQL 인젝션에 취약하다는 것을 알았지 만, 이것은 문자 그대로 데이터베이스를 다루는 처음 문자입니다. –