2016-05-22 11 views
0

「1つまたは複数の必須パラメータに値が指定されていません」というエラーが表示されます。 Nid.Textの値は "N712"です。1つまたは複数の必須パラメータに値が指定されていません

private void Form1_Load(object sender, EventArgs e) 
     { 
      OleDbConnection cont1 = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=H:\vsual\Database3.accdb"); 
      OleDbCommand cmd1 = new OleDbCommand("select distinct UserName from Users where [email protected] ", cont1); 
      OleDbCommand cmd2 = new OleDbCommand("select distinct QueueName from Users where [email protected] ", cont1); 
      OleDbCommand cmd3 = new OleDbCommand("select * from Issues", cont1); 
      cmd1.Parameters.AddWithValue("@UID", Nid.Text); 
      cmd2.Parameters.AddWithValue("@UID", Nid.Text); 
      cont1.Open(); 
      OleDbDataReader rdr1= cmd1.ExecuteReader(); 
      while(rdr1.Read()) 
      { 
       txtName.Text = rdr1[0].ToString(); 
      } 
      OleDbDataReader rdr2 = cmd2.ExecuteReader(); 
      while (rdr2.Read()) 
      { 
       txtQueue.Text= rdr2[0].ToString(); 
      } 
      txtName.Enabled = false; 
      txtQueue.Enabled = false; 

      OleDbDataAdapter da = new OleDbDataAdapter(); 
      DataSet ds = new DataSet(); 
      da.SelectCommand = cmd3; 
      da.Fill(ds); 
      cmbIssue.DataSource = ds.Tables[0]; 
      cmbIssue.ValueMember = "Issues"; 
      cmbIssue.DisplayMember = "Issues"; 
      cmbIssue.Enabled = true; 

     } 

私はインターネットから入手したすべてのSQLステートメントのいくつかの問題です。この問題を解決するために私を助けてください。

+0

'cont1.Open()移動してみてください;' OleDbCommand'を使用する前に、 '権利を。 –

+0

あなたはこのようにしてみることができます: '' UID =?」のユーザから異なるユーザ名を選択してください。 – Berkay

答えて

0

私はあなたのコードをテストしたが、同じエラーが発生しましたが、あなたのクエリに一致するように私のデータベースを修正し、うまくいきました。

テーブルから列を削除してテストすると、エラーが再び表示されました。だから、私はこの場合、誤解を招くエラーメッセージであり、実際にはあなたのクエリで参照しているカラムがデータベースにないことになります(あなたのパラメータの問題ではなく)。

ユーザーからQueueName列を削除すると、指定したメッセージでcmd2が破損しました。

データベースを見て、列がクエリと一致していることを確認してください。つまり、UserNameテーブルの列にはUID,UserName,QueueNameIssuesのテーブルにはIssuesの列が必要です。

更新:私は正常にコードを実行するために使用したデータの画像を追加します。あなたのデータと一致しないものがあるかどうか見てください。特にデータ型をチェックする。

ユーザーのスキーマ:

Users schema

ユーザーデータ:

Users data

問題スキーマ:

Issues schema

問題データ:

Issues data

+0

データベースは正しいです。 'User'テーブルに' UID'、 'UserName'、' QueueName'、 'Issues'テーブルの列に' Issues'列があります。 – Deb

+0

私は自分の答えを更新しました。 – Tone

0

これは助けることがわからない場合があります。

OLE DB .NETプロバイダーは、CommandTypeがTextに設定されている場合、SQLステートメントまたはOleDbCommandによって呼び出されるストアドプロシージャにパラメーターを渡すための名前付きパラメーターをサポートしていません。この場合、疑問符(?)のプレースホルダを使用する必要があります。例えば:

SELECT * FROM Customers WHERE CustomerID = ? 

したがって、OleDbParameterオブジェクトがOleDbParameterCollectionに添加される順序は、直接コマンド・テキスト内のパラメータの疑問符の位置に対応しなければなりません。

出典:https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

+1

それは私の悪かったです。データベースのアドレスが古いデータベースを指していました。だから私の変更されたデータベースは取得されていませんでした。今はすべて正常に動作します。あなたの助けをありがとう。 – Deb

関連する問題