VB.netでデータベースのデータを更新(追加、変更、削除)をしたいのですが、下記のようなコードを作成したのですが追加ができません。
-------------------------------------------------------------------
Dim oADP As OleDbDataAdapter
Dim oDs As DataSet
Dim InsertCmd As OleDbCommand
Dim strSQL As String
strSQL = "INSERT INTO Baitai (BaitaiCode, BaitaiName)" & _
" VALUES ('" & txtCode.Text & "', '" & txtName.Text & "')"
InsertCmd = New OleDbCommand(strSQL1, oDbConSting)
oADP = New OleDbDataAdapter()
oADP.InsertCommand = InsertCmd
----------------------------------------------------------------
以上です。初めてでいろいろと苦戦しています。おかしいところがあれば教えて下さい。よろしくお願い致します。
このOleDbなんとかってのは使ったことないのでよく分かりませんが
> InsertCmd = New OleDbCommand(strSQL1, oDbConSting)
ここで使ってるstrSQL1ってのはなんですかね?
ソース内に出て来てないようですが。
すいません。
その上のINSERT文のstrSQLのことです。
InsertCmd = New OleDbCommand(strSQL, oDbConSting)
もしくわDataSetオブジェクトを使用して特定のデータの更新する方法がありますか?
DataAdapter.InsertCommandプロパティを使っているという事は、
(DataAdapter.Updateなどをを使って)DataTable経由で
更新しようとしているのでしょうか?
そうではなく、単にINSERT SQLを発行したいだけなのであれば、
Command.ExecuteNonQueryメソッドを発行するだけで済むかと思いますよ。
DataTable経由で更新したいのですが、MSDNとか見ているのですが理解ができないんです。
多分、oDbConStingはOleDbConnectionの事と前提して記述します。
Insert文を流したいだけであれば、
Dim m_cmd As IDbCommand
Dim strSQL as string = "INSERT INTO Baitai (BaitaiCode, BaitaiName)" & _
" VALUES ('" & txtCode.Text & "', '" & txtName.Text & "')"
Try
m_cmd = m_oDbConSting.CreateCommand
m_cmd.CommandText = strSQL
m_cmd.ExecuteNonQuery() 'コマンド実行
Catch ex As Exception
'エラートラップ
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try
で実行できますよ
クリリンさんのを参考にしてみたのですが、
> m_cmd.ExecuteNonQuery() 'コマンド実行
で、「ExecuteNonQueryには接続が開かれていて使用可能なことが必要です」
とエラーがでるのですが
ちなみに、oDbConStringはOleDbConnectionのことです。
OleDbConnectionは先にOpenしている事が前提です。
もちろん、私が記述しているコードもそうですが、
DataAdapterを使用している場合でも同様です。
ただし、DataAdapterはOleDbConnectionをOpenした後は、
接続情報を保持しているので、OleDbConnectionをCloseしてもかまわなかったと思います。
ADO.NETの操作を行なうクラスを作りました。
ただし、DataAdapterを使用していませんので、読み取り専用です。
また、DataReaderの性質上、機能が乏しいのであしからず…
http://www.takonet.co.jp/~pegasus/samples/ADO.NET.lzh
クリリンさんありがとうございます。
しかし、私が行いたいのはDataSetオブジェクトを利用して非接続型のデータベースアクセスを考えているのですけど…
ふむ、確かに
「ExecuteNonQueryには接続が開かれていて使用可能なことが必要です」
とでますねぇ・・・
ちょっと調べて見ます。
ついでに、DataSet用のクラスも作成中ですし…
非接続型といえど、データを追加、更新、削除する場合はそのタイミングで接続しないといけないみたいです。
なんか、このやり方って、ADOの時代からやっていたんですけどねぇ…
今の所、DataSetの大きなメリットって見出せないのですが、どうなんでしょうか?知りたいところです。何かわかりましたら報告します。
やっぱりそうなんですかね…
自分も調べてみます。
とりあえずですが・・・
http://www.gotdotnet.com/japan/team/fieldevangelists/fusaito/meikaiADONET1.aspx
ここをご覧になりましたか?
基本的には、SQL Server へと、Accessへの接続には、Sql... と、OleDb...
と違いますが、同じなので・・・
お試し下さい。
以上。
ツイート | ![]() |