2014-07-25 2 views
-2

Microsoft Access 2013 (데이터베이스 이름 : kyt, 테이블 이름 : vg_info_table)을 사용합니다."처리되지 않은 'System.InvalidOperationException'형식의 예외가 System.Data.dll에서 발생했습니다."

: 나는이 작동이 코드를 실행,하지만 난 콤보 상자에서 선택한 값을 선택하고 전송 버튼을 클릭하면 (값이 내 데이터베이스에 기록해야한다 vg_1 필드) 때 나는 오류 (komut.ExecuteNonQuery();)를 얻을 'System.InvalidOperationException'형식 의 처리되지 않은 예외가 system.data.dll

에서 발생

추가 정보 : ExecuteNonQuery는 : 연결 속성이 가 초기화되지 않았습니다.

내 전체 코드는 여기에 있습니다.

namespace afeusdotnet 
{ 

    public partial class verigirisekranisorular1 : UserControl { 

    OleDbConnection bag = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=kyt.accdb;Persist Security Info=False;"); 

    DataTable tablo = new DataTable(); 
    OleDbDataAdapter adptr = new OleDbDataAdapter(); 
    OleDbCommand komut = new OleDbCommand(); 
    DataSet dset = new DataSet(); 
    verigirisekranisorular2 soru2 = new verigirisekranisorular2(); 

    public verigirisekranisorular1() { 
     InitializeComponent(); 
    } 

    void Listele(){ 
     bag.Open(); 
     OleDbDataAdapter adptr = new OleDbDataAdapter("Select * From vg_info_table", bag); 
     adptr.Fill(tablo); 
     adptr.Dispose(); 
     bag.Close(); 
    }  

    private void button2_Click(object sender, EventArgs e) { 

     if (comboBox1.Text.ToString() == "") 
      MessageBox.Show("ilgili alanları doldurunuz"); 
     else { 

       bag.Open(); 

       komut.CommandText = "INSERT INTO vg_info_table(vg_1) VALUES ('" + comboBox1.Text.ToString() + "')"; 
       komut.ExecuteNonQuery(); 

       bag.Close();  
       Listele(); 
       MessageBox.Show("kaydınız tamamlandı diğer sayfaya geçiniz"); 
      } 
     } 
    } 
+0

생성자 내에서 oledbcommand에 대한 연결을 전달해야합니다. – LazyOfT

+1

** 경고 ** 귀하의 코드는 SQL 주입 공격에 취약합니다! –

답변

1

OleDbCommand에 연결을 지정해야합니다.

komut.Connection = bag; 
komut.CommandText = "INSERT INTO vg_info_table(vg_1) VALUES ('" + comboBox1.Text.ToString() +"')"; 
bag.Open(); 
komut.ExecuteNonQuery(); 

이외에도 sql-injection (다른 것들 중에서도)을 방지하기 위해 문자열 연결 대신 sql-parameters를 사용해야합니다.

+0

** 경고 **이 코드는 SQL 주입 공격에 취약합니다! –

+1

@ DanielA.White : 이미 언급했습니다. –

+0

팀, 당신을 사랑해, 내 localdb 연결을 작동시키는 방법에 대해 약 100 페이지를 읽었으며 한 번도 SqlConnection을 SqlCommand에 전달하지 못했다. 일단 당신이 알고 있으면 명백하게 보일지라도. – Scriven