2016-12-07 9 views
-1

VB.netで検索ボタンを実行する方法に関するいくつかのコードを検索しました。しかし何とか、それはエラーのために動作しません。そして、私はそのアルゴリズムと機能を理解できません。初心者ここに。とにかく、ここでは検索ボタンのコードです:検索ボタンのエラー

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    myConnection.Open() 
    crd.Clear() 
    fn.Clear() 
    ln.Clear() 
    Dim str As String 
    str = "SELECT * FROM tblReg WHERE (Code = '" & src.Text & "')" 
    Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection) 
    dr = cmd.ExecuteReader 
    While dr.Read() 
     crd.Text = dr("crd").ToString 
     fn.Text = dr("fName").ToString 
     ln.Text = dr("lName").ToString 
    End While 
    myConnection.Close() 
End Sub 

は、エラーがでました:

dr = cmd.ExecuteReader 

そして、VBは言った:

タイプの未処理の例外「System.Data .OleDb.OleDbException 'がSystem.Data.dllで発生しました

追加情報:1つまたは複数の必須パラメーターに値が指定されていません。

+0

可能な複製:http://stackoverflow.com/questions/18112264/c-sharp-oledb-exception-no-value-given-for-one-or-more-required-parameters-whi –

+0

@DanielShillcock OPすでに値の周りに一重引用符があります。 – GSerg

+1

@GSerg 'src.Text'にアポストロフィが含まれていれば?;-) OPはパラメータ化されたクエリを使用する必要があります。 –

答えて

-1

コードを取得するリンクですか?

http://www.visual-basic-tutorials.com/ReadFromAccess.htm

は親切にコードが出力番組に各データを読み込んでも、コードのこの部分をチェックし得ることはありません。

crd.Text = dr("crd").ToString 
     fn.Text = dr("fName").ToString 
     ln.Text = dr("lName").ToString 

確かにcrd,fname,lnameはあなたのテーブルのフィールドの名前ですか? plsそれをチェックし、フィールドタイプがcode?であることは、テキストまたはINTが自動増分ですか?またはINTだけ?どのようなコードを変更しても問題ありません。

を更新しました

str = "SELECT * FROM tblReg WHERE Code =" & src.Text

str = "SELECT * FROM tblReg WHERE (Code = '" & src.Text & "')"

から私はより良いあなたのコードを取得したリンクに基づいて、全体の命令を読んだりくださいお勧め。私は、リンクが同じものを作成すると言ったものと同じことをお勧めします。プログラムがエラーなしで実行され、プログラムbeacuseに組み込みます。VB.NETとAccessを使って試しました。あなたとあなたが学ぶ必要があるコードを手に入れるだけではないと確信しています。

+0

はいはい。彼らは私のフィールドの名前です。私はそれらを三重にチェックした。 'コード'とは何ですか?ははは。 :>ありがとう。 :D – Gaaaaaab

+0

'' SELECT * FROM tblReg WHERE Code = "&src.Text'これでコードをこの –

+0

に置き換えます。 –

0

非常に悪いコードを教えるオンラインチュートリアルに従うべきではありません。 That codeは、SQL injectionを含んでおり、データベースオブジェクトを開いたままにしているため、非常に悪いです。

次のようにあなたのコードを書き換える必要があります。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    myConnection.Open() 
    crd.Clear() 
    fn.Clear() 
    ln.Clear() 

    Using cmd = New OleDbCommand("SELECT * FROM tblReg WHERE Code = ?", myConnection) 
     cmd.CommandType = CommandType.Text 

     With cmd.Parameters.Add(Nothing, OleDbType.VarChar, 50) 
      .Direction = ParameterDirection.Input 
      .Value = src.Text 
     End With 

     Using dr = cmd.ExecuteReader() 
      While dr.Read() 
       crd.Text = dr("crd").ToString 
       fn.Text = dr("fName").ToString 
       ln.Text = dr("lName").ToString 
      End While 
     End Using 
    End Using 

    myConnection.Close() 
End Sub 

はあなたがOleDbCommanddoes not support named parametersことを利用しているので、パラメータの代わりに疑問符を使用する必要があります。

OleDbType.VarCharを実際のカラムタイプに変更してください。

+0

私はそれを試してみます。どうもありがとうございます。 :> – Gaaaaaab

+0

'OleDbType.Varchar'を置き換えたときに' dr = cmd.ExecuteReader() 'にもエラーがありますが、それを受け付けません。 – Gaaaaaab

+0

エラーは 'cmd.ExecuteReader'にあると確信しています。何を置き換えましたか? – GSerg

関連する問題