2017-05-20 67 views
0

我的錯誤是 類型「System.Data.OleDb.OleDbException」未處理的異常出現在system.data.dll沒有爲一個或多個必需的參數給定值。當所有的參數都給出

更多信息:沒有給出一個或多個必需參數的值。

但這是當所有參數的本次代碼波紋管:

private OleDbDataReader dbReader;// Data Reader object 
    string sConnection = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=ICTSchool.accdb"; 
    string sql; 
    OleDbConnection dbConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=ICTSchool.accdb"); 
    OleDbCommand dbCommand; 

public class ComboboxItem 
    { 
     public string Text { get; set; } 
     public object Value { get; set; } 

     public override string ToString() 
     { 
      return Text; 
     } 
    } 

private void bAdd_Click(object sender, EventArgs e) 
    { 
     { 
      dbConn = new OleDbConnection(sConnection); 

      dbConn.ConnectionString = sConnection; 


      dbConn.Open(); 
      string code = (cBQualification.SelectedItem as ComboboxItem).Value.ToString(); 
      string sqlinsert = "INSERT INTO Student VALUES (" + tBStudentNum.Text + "," + tBStudentName.Text+","+ tBCellNo.Text+","+ code + ")"; 
      Console.WriteLine("Test 'sqlinsert' "+ sqlinsert); 

      dbCommand = new OleDbCommand(sqlinsert, dbConn); 

      dbCommand.ExecuteNonQuery(); 
     } 
    } 
+0

什麼是學生表的樣子?如果表只有這四個非空字段,你確定你的應用程序中的一個或多個TextBox不是空的嗎?最後,文本字段應該放在單引號內,這是你沒有做的。 –

回答

0

下面是關於如何在MS Access插入值文章的一部分。 要向表中添加一條記錄,必須使用字段列表來定義將數據放入哪些字段,然後您必須將數據本身提供給值列表。要定義值列表,請使用VALUES子句。

例如,以下語句將分別將值「1」,「Kelly」和「Jill」插入到CustomerID,Last Name和First Name字段中。

INSERT INTO tblCustomers(客戶ID,[姓氏],[名]) VALUES(1, '凱利', '吉爾')

可以省略字段列表,但只有當你提供記錄可以包含的所有值時。

INSERT INTO tblCustomers VALUES(1,凱利, '吉爾', '555-1040', '[email protected]')

MSDN How to: Insert, Update, and Delete Records From a Table Using Access SQL

0

若干觀察; 1)您尚未在SQL中指定參數,因此我們只能假定Student表中有四個字段。 2)你不使用命名參數 - 這通常是不好的做法。 3)您正在使用連接值和SQL - 這會使您容易受到SQL注入攻擊 4)任何一個文本框可能包含逗號或導致SQL錯誤的其他SQL格式化字符。

0

我看到的問題可能是因爲格式錯誤的SQL語句。該字符串值(NVARCHAR,VARCHAR)應單引號,我相信也不怎麼你現在用下面的語句做內封閉

string sqlinsert = "INSERT INTO Student VALUES (" + tBStudentNum.Text + "," + tBStudentName.Text+","+ tBCellNo.Text+","+ code + ")"; 

嘗試更改SQL語句

string sqlinsert = $"INSERT INTO Student VALUES ({tBStudentNum.Text}, '{tBStudentName.Text}', {tBCellNo.Text}, '{code}')"; 

我在上述情況下做出了假設tBStudentNum.Text和tBCellNo.Text是數字值。如果沒有,您可以進行適當的更改以將值放入單引號內。

如果您使用的是較低版本的.net/C#,請使用string.format函數替換$ expression。

相關問題