2014-02-20 23 views
-2
private void button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string strcmd = "INSERT INTO student VALUES('" + txtsname.Text + "','" + txtsrollno.Text + "')"; 

     cmd = new OleDbCommand(strcmd, MyConn); 
     if (MyConn.State == ConnectionState.Closed) { MyConn.Open(); } 
     cmd.ExecuteNonQuery(); 
     if (MyConn.State == ConnectionState.Open) { MyConn.Close(); } 

     showData(); 

    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
+0

學生是否有超過2列? –

+0

沒有你只有2欄 –

+0

你的問題是什麼? – idanshmu

回答

0

這個錯誤的原因可能是你的表格列名和卷號有不同的類型。在代碼中,如果在數據庫中傳遞文本,則這些列應具有varchar數據類型。

+0

我檢查我的表名是文本類型和卷號是 –

+0

我使用ms訪問來存儲數據 –

+0

那麼你需要轉換你的卷數字轉換爲整數,如下所示:string strcmd =「INSERT INTO student VALUES('」+ txtsname.Text +「','」+ Converter.ToInt(txtsrollno.Text)+「')」; –

3

看起來像Roll No是整數類型,並且您試圖通過將值包含在單引號中來插入字符串數據。

使用參數。他們將爲您節省SQL注入,並將防止類似上述的錯誤。你可以這樣做:

private void button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string strcmd = "INSERT INTO student VALUES(@name,@rollno)"; 
     using (OleDbConnection MyConn = new OleDbConnection("connectionstring")) 
     { 
      using (OleDbCommand cmd = new OleDbCommand(strcmd, MyConn)) 
      { 
       cmd.Parameters.AddWithValue("@name", txtsname.Text); 
       cmd.Parameters.AddWithValue("@rollno", int.Parse(txtslrollno.Text)); 

       if (MyConn.State == ConnectionState.Closed) { MyConn.Open(); } 
       cmd.ExecuteNonQuery(); 
       if (MyConn.State == ConnectionState.Open) { MyConn.Close(); } 

       showData(); 
      } 
     } 

    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
+0

實際上使用我的代碼im在該表中插入三個條目,bt現在我試圖插入新條目他們給我的錯誤... –

+0

條件表達式中的數據類型不匹配 –

+0

@ user3308969,你確定你在相同的代碼中得到異常嗎? – Habib

0

我懷疑你在表中有更多的列和程序你逝去的只有兩個值現在SQL是consdiering,你只有兩列在表中,以解決它,你需要重寫你的sql查詢。我正在使用虛擬列名稱,請將其更改爲您自己的列。

private void button1_Click(object sender, EventArgs e) 
    { 
    try 
    { 
     string strcmd = "INSERT INTO student (name, rollno) VALUES('" + txtsname.Text + "','" + Convert.ToInt32(txtsrollno.Text) + "')"; 

     cmd = new OleDbCommand(strcmd, MyConn); 
     if (MyConn.State == ConnectionState.Closed) { MyConn.Open(); } 
     cmd.ExecuteNonQuery(); 
     if (MyConn.State == ConnectionState.Open) { MyConn.Close(); } 

     showData(); 

    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
相關問題