2017-05-20 5 views
0

エラータイプ「System.Data.OleDb.OleDbException」の未処理の例外がのSystem.Data.dll一つ以上の必要なパラメータすべてのパラメータが与えられたとき、私が得る

で発生しました追加情報 あるために与えられた値がありません:1つまたは複数の必須パラメーターに値が指定されていません。

が、すべてのパラメータを現在のコード怒鳴る、これは次のとおりです。

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

生徒の表はどのように見えますか?テーブルにこれらの4つのnull以外のフィールドしかない場合は、アプリ内のTextBoxの1つ以上が空ではないことを確認してください。最後に、テキストフィールドは一重引用符で囲まれていなければなりません。 –

答えて

0

ここでは、MS Accessで値を挿入する方法についての記事の一部です。 テーブルにレコードを1つ追加するには、フィールドリストを使用してデータを格納するフィールドを定義し、データ自体を値リストに入力する必要があります。値リストを定義するには、VALUES句を使用します。

はたとえば、次の文は、それぞれ、値が「1」、「ケリー」、および得意先への「ジル」、姓、およびファーストネームのフィールドを挿入します。

tblCustomers INTO INSERT(得意先、[姓]、[姓]) VALUES(1、 'ケリー'、 'ジル')

あなたは、フィールドリストを省略することができますが、レコードに含めることができるすべての値を指定した場合に限ります。

tblCustomers値にINSERT(1、ケリー、 'ジル'、 '555から1040' '[email protected]')

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

0

の数観察; 1)SQLにパラメータを指定していないので、Studentテーブルに4つのフィールドしかないと仮定できます。 2)名前付きパラメータを使用していません - これは一般に貧弱な方法です。 3)あなたは連結された値とSQLを使用している - これは、テキストボックスのいずれかが、SQLエラーにつながるカンマまたは他のSQLの書式文字が含まれる場合があります)SQLインジェクション攻撃 4に対して脆弱にあなたを残します。

0

私が見る問題は、不正なSQL文であってもよいです。文字列値(NVARCHAR、VARCHARは)私はあなたが次の文で、今やっている方法ではないと考えている単一引用符で囲む必要があり

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

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

にSQLステートメントを変更してみてください上記の場合、tBStudentNum.TextとtBCellNo.Textは数値であると仮定しています。そうでない場合は、適切な変更を加えて値を一重引用符で囲むことができます。

は、.NET/C#2の下位バージョンを使用している場合は、String.Formatの機能を$式を交換してください。

関連する問題