2011-09-22 2 views
1

정상적인 조건에서 작동하는 SQL 삽입 명령이 있습니다. 즉, 모든 텍스트 상자를 채우면 데이터가 db (Acces db)로 전송됩니다.MS 액세스에 대한 INSERT INTO 문에서 구문 오류가 발생했습니다.

하지만 '1 개의 텍스트 상자를 잊어 버리면'INSERT INTO 문에 구문 오류가 발생합니다. ' 어떻게 이것을 피할 수 있습니까?

string commandPerson = "Insert into Person (LastName,FirstName,DateOfBirth,Phone,Email,AdditionalInfo, Hobbies, CVinDropBOX, Informationrequest) values('" + txtLastN.Text + "','" + txtFirstN.Text + "'," + txtDOB.Text + ",'" + txtPhone.Text + "','" + txtEmail.Text + "','" + txtAdditionalInfo.Text + "','" + txtHobbies.Text + "'," + chkCVDROPBOX.Checked + "," + chkInformation.Checked + ")"; 

모든 텍스트 상자에 값이 있으면 문제가 없습니다. 난 빈 1 개 또는 2 개의 텍스트 상자를 떠날 때 그것은 단지이며, 오류 메시지가 표시됩니다 : 문

+0

없는 크리스탈 공 그래서 코드를 보여주지 않으면, 아무도 당신이 무엇을하고 있는지 알지 못합니다. –

답변

3

INTO INSERT에서 구문 오류가 당신이 있기 때문에 문제를 해결할뿐만 아니라 SQL 주입에 대한 안전있는 매개 변수화 방법을 사용뿐만 아니라하자 제공되지 않을 경우 매개 변수 값을 NULL (또는 string.empty)로 설정합니다. 여기

예 : 전체 기사 여기

string ConnString = Utils.GetConnString(); 
string SqlString = "Insert Into Contacts (FirstName, LastName) Values (?,?)"; 
using (OleDbConnection conn = new OleDbConnection(ConnString)) 
{ 
    using (OleDbCommand cmd = new OleDbCommand(SqlString, conn)) 
    { 
    cmd.CommandType = CommandType.Text; 
    cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text); 
    cmd.Parameters.AddWithValue("LastName", txtLastName.Text); 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    } 
} 

과 : http://www.mikesdotnetting.com/Article/26/Parameter-Queries-in-ASP.NET-with-MS-Access

1

가 (당신이 따옴표를 누락)에 생년월일이 시도 : 여기

'" + txtDOB.Text + "'. 
+0

시도해보십시오 (' "+ Convert.ToDateTime (txtDOB.Text) .toString() +"') –

관련 문제