1

Insert into/ 構文は正しいと思いますが、プロジェクトを実行すると常にエラーが発生します...このコードでは、vb2012 を使用してデータベース ms access 2013 にデータを追加しようとしています。

Private Sub btnadd_Click(sender As Object, e As EventArgs) Handles btnadd.Click

    provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
    dataFile = "C:\Users\hp-2\Documents\Visual Studio 2012\Projects\Delta\Delta.mdb"

    connString = provider & dataFile
    cnn.ConnectionString = connString
    cnn.Open()

    cmd.Connection = cnn
    addstring = "insert into Transaction (Customer_Name, Job, Trans_date, Amount ) values (" & C_name.Text & ",'" & C_job.Text.Length & "','" & t_date.Text & "','" & t_amount.Text & "');"
    cmd = New OleDbCommand(addstring, cnn)
    cmd.ExecuteNonQuery()
    cnn.Close()
End Sub

これはエラーです...

An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll

Additional information: Syntax error in INSERT INTO statement.
4

3 に答える 3

0

customer_name は引用符で囲まれていません。あなたも .Length を渡していますが、これはあなたがやりたいことだとは思いません。

最も重要なことは、すべてをパラメーターに入れる必要があることです。

addstring = "insert into Transaction (Customer_Name, Job, Trans_date, Amount ) values (@Customer_Name, @Job, @Trans_date, @Amount);"

cmd = New OleDbCommand(addstring, cnn)

cmd.Parameters.AddWithValue("@Customer_Name", C_name.Text)
cmd.Parameters.AddWithValue("@Job", C_job.Text)
cmd.Parameters.AddWithValue("@Trans_date", Convert.ToDateTime(t_date.Text))
cmd.Parameters.AddWithValue("@Amount", Convert.ToInt32(t_amount.Text))
于 2013-08-12T13:37:23.853 に答える
0

問題がVALUES句の引用符の誤りによるものである場合、 「基準式のデータ型の不一致」という別のエラー、または db エンジンがパラメーター値を予期していたが何も指定しなかったというメッセージが表示されると思います。

Transaction私の推測では、構文エラーはそれが予約語であるという事実によるものです。テーブル名を角かっこで囲んだときに機能するかどうかを確認します。

insert into [Transaction] (Customer_Name, Job,  ... 

その変更によってエラーが解消される場合は、そこでやめるべきではないと思います。値を文字列に構築して文字列を実行する代わりに、他の人が提案したように、パラメータークエリに切り替えます。SQL インジェクション エラーに対する保護に加えて、パラメーター クエリはVALUES句内の引用符による複雑さを回避します。そして、そのアドバイスに従う場合でも、ブラケットを使用する必要があります[Transaction]。できれば、テーブル名を予約語以外に変更してください。

于 2013-08-12T12:36:46.743 に答える