1

vb の給与計算システムに OLE db 接続を使用しています。トランザクションを最初に保存すると、データベースに正常に保存されますが、賃金を計算する別のアカウントを選択して保存しようとすると、「挿入時に構文エラーがある」というエラーが返されます。

ここに私のコードがあります:

    com5 = "INSERT INTO PayrollReport Values('" & empno.Text & "','" & ename.Text & "','" & startdate.Text & "','" & _
        cutdate.Text & "'," & bpay.Text & "," & computation.Text & "," & grosse.Text & "," & _
        lwop.Text & "," & tardiness.Text & "," & tax.Text & "," & sssp.Text & "," & _
        philp.Text & "," & hdmfp.Text & "," & sssl.Text & "," & hdmfl.Text & "," & _
        advance.Text & "," & taxdue.Text & "," & nete.Text & "," & deduction.Text & "," & _
        netpay.Text & "," & Employee.Esss.Text & "," & Employee.Ephil.Text & "," & Employee.Ehdmf.Text & ")"


    MsgBox(" The " & ename.Text & "'s Record has been save!")

    connect5()

これで私を助けてくれることを願っています...

4

1 に答える 1

1

以下で説明するものを使用するようにコードを変換すると、エラーが明らかになります。

データベースにデータを挿入するには、次のようなコードを使用する必要があります。

パラメーター化された SQL - ストアド プロシージャを使用していないにもかかわらず、SQL パラメーターを利用する必要があります。これはエラーの原因ではありません。元のコードは、ユーザーから直接値を SQL ステートメントにダンプします。SQL パラメータを使用しない限り、悪意のあるユーザーがデータを盗みます。

    Dim CMD As New SqlCommand("Select * from MyTable where BookID = @BookID")
    CMD.Parameters.Add("@BookID", SqlDbType.Int).Value = CInt(TXT_BookdID.Text)

データベースにデータを安全にフィードするためのプレースホルダーを確立できるだけでなく、データ型も確立できることに注意してください。これは、データ変換エラーをキャッチするのに役立ちます。たとえば、ユーザーが整数を期待するフィールドに 4E を入力すると、私が投稿したコードは、int への変換の失敗に関する非常に明白なエラーを表示します。

参照

このリンクは、VB.NET でデータベースに接続する適切な方法の詳細を提供します。

于 2013-02-13T02:08:32.607 に答える