2013-12-20 2 views
2

안녕하세요, 저는 간단한 삽입 문을 가지고 있습니다. 버튼을 클릭하여 삽입하지 않으면 무언가가 빠져 있다는 것을 알고 있습니다. 아이디어가 있습니까?insert statement C# with MS Access

protected void saveyear_Click(object sender, EventArgs e) 
{ 
    OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\ASPNetDB.mdb;Persist Security Info=True"); 
    OleDbDataAdapter da = new OleDbDataAdapter(); 

    da.InsertCommand = new OleDbCommand("INSERT INTO DVD_Infomation (Year) VALUES (@Year)", connection); 
    { 
     da.InsertCommand.Parameters.AddWithValue("@Year", Year.Text); 
    } 

    connection.Open(); 

     da.InsertCommand.ExecuteNonQuery(); 

    connection.Close(); 
} 

답변

5

YEAR은 MS-Access Jet의 예약어입니다. 당신이 당신의 컬럼의 이름으로 사용하려는 경우
당신이 대괄호

da.InsertCommand = new OleDbCommand("INSERT INTO DVD_Infomation ([Year]) VALUES (@Year)", connection); 
{ 
    da.InsertCommand.Parameters.AddWithValue("@Year", Year.Text); 
} 

여전히 가능하다면

로 묶어야한다, 그 컬럼의 이름을 변경하는 것이 좋습니다. 내가

using(OleDbConnection connection = new OleDbConnection(.....)) 
using(OleDbCommand cmd = new OleDbCommand("INSERT INTO DVD_Infomation ([Year]) VALUES (@Year)", connection)) 
{ 
    cmd.Parameters.AddWithValue("@Year", Year.Text); 
    connection.Open(); 
    cmd.ExecuteNonQuery(); 
} 

가 생성 주위 using statement을 추가로 위의 코드를 작성하는 것,이 오류에 당신이 당신의 문

보조 노트로

을에 해당 열을 사용하려고 할 때마다 그루터기에 성가신 것 연결 및 명령은 또한 예외의 경우 이러한 개체의 적절한 폐쇄하고 폐기를 보장하고 더 리소스 사용 친화적

+0

아, 그 생각하지 않았다, 감사합니다 @ 스티브 – Beep

2

는 당신이 그것을 도울 수 있다면, 당신의 테이블에 예약 된 단어를 사용하지 마십시오 프로그램을 유지합니다. YEAR는 예약어이므로 이름 주변에 대괄호를 사용해야합니다. 나중에 테이블에서 필드 이름을 변경하여 해당 문제를 피하십시오. 마찬가지로 공백이 포함 된 필드 이름을 사용하면 필드 이름을 참조 할 때 문제가 발생하므로이 필드 이름에 대해서도 눈살을 찌푸리게됩니다.