2017-05-20 5 views
0

Der Fehler i erhalten, ist Eine nicht behandelte Ausnahme des Typs ‚System.Data.OleDb.OleDbException‘ in System.Data.dll aufgetretenkein Wert angegeben für eine oder mehrere erforderliche Parameter Wenn alle Parameter angegeben

Zusätzliche Informationen : Kein Wert für einen oder mehrere erforderliche Parameter angegeben.

aber das ist, wenn alle Parameter ein Geschenk Code unten:

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

Und wie sieht der Schülertisch aus? Und wenn die Tabelle nur diese vier Felder enthält, die nicht null sind, sind Sie sicher, dass ein oder mehrere der TextBoxs in Ihrer App nicht leer sind? Und zuletzt sollten die Textfelder in einfachen Anführungszeichen stehen, was Sie nicht tun. –

Antwort

0

Hier Teil des Artikels, ist, wie Werte in MS Access einzufügen. Um einen Datensatz zu einer Tabelle hinzuzufügen, müssen Sie in der Feldliste definieren, in welche Felder die Daten eingefügt werden sollen. Anschließend müssen Sie die Daten selbst in einer Werteliste angeben. Verwenden Sie die VALUES-Klausel, um die Werteliste zu definieren.

Zum Beispiel fügt die folgende Anweisung die Werte "1", "Kelly" und "Jill" in die Felder "CustomerID", "Nachname" und "Vorname" ein.

INSERT INTO tblKunden (CustomerID, [Nachname], [Vorname]) VALUES (1, 'Kelly', 'Jill')

Sie die Feldliste weglassen, aber Nur wenn Sie alle Werte angeben, die der Datensatz enthalten kann.

INSERT INTO tblKunden VALUES (1, Kelly, 'Jill', '555-1040', '[email protected]')

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

0

Eine Reihe von Beobachtungen; 1) Sie haben die Parameter in der SQL nicht angegeben, so dass wir nur annehmen können, dass es vier Felder in der Student-Tabelle gibt. 2) Sie verwenden keine benannten Parameter - dies ist in der Regel eine schlechte Praxis. 3) Sie verwenden verkettete Werte und SQL - dies wird Sie anfällig für eine SQL-Injektion Angriff 4) Eines der Textfelder möglicherweise ein Komma oder andere SQL-Formatierungszeichen führen zu SQL-Fehlern.

0

Das Problem, das ich sehe, kann wegen falsch formatierter SQL-Anweisung sein. Die String-Werte (NVARCHAR, VARCHAR) sollten in einfache Anführungszeichen eingeschlossen werden, die ich glaube, ist nicht, wie Sie jetzt mit folgenden Anweisung tun

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

Versuchen Sie, die SQL-Anweisung zu

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

I‘ Im obigen Fall wurde eine Annahme gemacht, dass tBStudentNum.Text und tBellNo.Text numerische Werte sind. Wenn nicht, können Sie entsprechende Änderungen vornehmen, um die Werte in Anführungszeichen zu setzen.

Wenn Sie eine niedrigere Version von .net/C# verwenden, ersetzen Sie den Ausdruck $ mit der Funktion string.format.

Verwandte Themen