タイトル : ADO.NETでのデータ更新について 投稿日 : 2004/10/27(Wed) 12:39 投稿者 : みけ
いつも参考にさせていただいております。 Oracleの更新先のテーブル名は、TEST で SYAIN_ID(主キー)・SYAIN_NAME の2フィールドをもっています。 SYAIN_ID = 'AAA'であるレコードのSYAIN_NAME を 更新しようとすると、DataAdapterのUpdateで 「UpdateCommand の動的 SQL 生成は、キーである列情報を返さない SelectCommand に対してサポートされていません。」という エラーが発生します。 OleDbCommandのExecuteNonQueryで値を更新すると、 うまくいくのですが・・・。 どなたかエラーの対処方法を教えていただけないでしょうか? よろしくお願いします。 ------ 実行環境 Windows2000 Professional Oracle 9i VisualBasic .NET 2003 .NET Framework 1.1 ------ 再現コード Imports System.Data.OleDb Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim strConn As String Dim objConn As OleDbConnection Dim objAdp As OleDbDataAdapter Dim objTbl As New DataTable Dim strSql As String Dim objRow As DataRow '接続文字列の設定 strConn = "Provider=OraOLEDB.Oracle" strConn &= ";User ID=test" strConn &= ";password=test" strConn &= ";Data Source=test" strConn &= ";Persist Security Info=False" '接続開始 objConn = New OleDbConnection(strConn) objConn.Open() strSql = "SELECT * FROM TEST" objAdp = New OleDbDataAdapter(strSql, objConn) objAdp.Fill(objTbl) '主キーの設定 With objTbl .PrimaryKey = New DataColumn() {.Columns("SYAIN_ID")} End With '更新処理 objRow = objTbl.Rows.Find("AAA") If Not objRow Is Nothing Then objRow.BeginEdit() objRow("SYAIN_NAME") = "山田" objRow.EndEdit() End If 'Sqlコマンドの自動作成 Dim objCmdBuilder As New OleDbCommandBuilder(objAdp) ' Dim cmdSql As OleDbCommand = objCmdBuilder.GetUpdateCommand objAdp.Update(objTbl) '←ここでエラー End Sub |