-1

これの何が問題になっていますか?

da.InsertCommand = New OleDb.OleDbCommand("Insert Into Table1 Values( 1, '" & TextBox1.Text & "')")
da.InsertCommand.Connection = con
con.Open()
da.Update(ds)
con.Close()

何があってもデータベースが更新されることはありません。または、dbに挿入するためのより良い方法はありますか?CommandBuilderを試しましたが、うまく機能しないようです。または、VB.NETのデータベースでクエリを直接実行できますか?

4

3 に答える 3

3

DataAdapter.Updateの機能について少し混乱しています。Updateは、InsertCommand、UpdateCommand、DeleteCommandを、データソースに存在するすべての追加、変更、または削除された行に適用して機能します(dsがDataSetであると想定)。
データベースにレコードを単独で追加/削除/更新することはありません。

データベースにレコードを追加する場合は、次のような(擬似)コードを作成する必要があります。

Using con = GetConnection()
Using cmd = new con.CreateCommand()
    cmd.CommandText = "Insert Into Table1 Values( 1, ?)"
    cmd.Parameters.AddWithValue("@param1", textbox1.Text)
    cmd.Connection = con
    con.Open()
    cmd.ExecuteNonQuery()
End Using
End Using

接続とコマンドを確実に閉じて破棄するために、Usingステートメントの使用に注意してください。また、SQLコマンドを作成するために文字列を連結しないでください。パラメータを使用すると、解析の問題やSQLInjection攻撃を回避できます。

編集:以下のコメントに基づいて、Table1の最初の列が自動番号フィールドであると仮定すると、この方法でコードを変更できます

Using con = GetConnection()
Using cmd = new con.CreateCommand()
    cmd.CommandText = "Insert Into Table1 Values(?)"
    cmd.Parameters.AddWithValue("@param1", textbox1.Text)
    cmd.Connection = con
    con.Open()
    cmd.ExecuteNonQuery()
End Using
End Using

Copy To The Output Directory また、「何も追加されていない」という問題については、プロジェクトにデータベースファイル(mdb)が含まれていて、プロパティがに設定されていると思います。Copy Always

このページでMSDNの詳細な説明を参照してください

于 2012-12-18T12:10:52.190 に答える
0

身なりがきちんとして...

Using oCmd As New OleDbCommand("Insert Into Table1 Values(1, '" & TextBox1.Text & "')", con)
    oCmd.ExecuteNonQuery()
End Using

SQLインジェクションまたはTextbox1.Textに一重引用符が含まれている可能性があるため、少し厄介ですが、テスト/開発の目的では機能します。

于 2012-12-18T12:10:22.627 に答える
0

はい、それはあなたが非クエリを実行しようとしたことがないからです。SELECTステートメントはクエリステートメントですが、INSERT、UPDATE、DELETEは非クエリステートメントであることを忘れないでください。da.Update()またはda.Fill()は、クエリ操作からの結果のみをプルします。

da.ExecuteNonQuery()またはVB.NETで非クエリステートメントを実行するステートメントとして接続を開いた後、余分な行を追加する必要があります。

〜Shakir Shabbir

于 2012-12-18T11:43:53.800 に答える