tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。