プロが教えるわが家の防犯対策術!

VB.Netを始めて一ヶ月。
DB接続は出来たもののREADのみで、更新処理が全く出来ません。
何が悪いのか、どうすればいいのかもわからず途方に暮れています。

どなたかお知恵をお貸し下さい。
下記にプログラムを記載します。

■◇■ 共通定数 ■◇■
Public gstrSysd As String = "DSN=DbName;UID=UserId;PWD=Password"
一部名称を変更しています。


■◇■ Readプログラム ■◇■
Public Sub psubDBReadK(ByVal strSql As String, Optional ByVal intDcnt As Integer = 0)

  Dim godbSysd As New OdbcConnection(gstrSysd)
  godbSysd.Open()
  Dim odbCom As New OdbcCommand(strSql, godbSysd)
  Dim odbRead As OdbcDataReader = odbCom.ExecuteReader(CommandBehavior.CloseConnection)
  Dim intLcnt As Integer

  Erase gtblDb
  glngDcnt = 0

  While odbRead.Read()
    glngDcnt = glngDcnt + 1
    ReDim Preserve gtblDb(intDcnt, glngDcnt)
    For intLcnt = 1 To intDcnt
      If IsDBNull(odbRead.GetValue(intLcnt - 1)) Then
        gtblDb(intLcnt, glngDcnt) = ""
      Else
        gtblDb(intLcnt, glngDcnt) = Trim(odbRead.GetString(intLcnt - 1))
      End If
    Next intLcnt
  End While

  odbRead.Close()
  godbSysd.Close()

End Sub

上記モジュールをSQL文を作成してCallします。

  strSql = ""
  strSql = strSql & "SELECT Mm, Wd, Dd, Nm "
  strSql = strSql & " FROM TableName "
  strSql = strSql & "WHERE Fd <= '" & lngYear & "' "
  strSql = strSql & " AND Ed >= '" & lngYear & "' "
  strSql = strSql & "ORDER BY Mm, Wd, Dd "

  Call psubDBReadK(strSql, 4)

ここまでは動作確認も出来ましたが、問題はWRITE処理です。

■◇■ WRITEプログラム ■◇■

Public Sub psubDbWriteK(ByVal strSql As String)

  Dim odbSysd As New OdbcConnection(gstrSysd)
  odbSysd.Open()
  Dim odbCom As New OdbcCommand(strSql, odbSysd)

  odbCom.Connection.Open()
  odbCom.ExecuteNonQuery()
  odbSysd.Close()

End Sub

上記コードだとコネクションのオープン時に『既に開かれています』のエラーとなりました。
同コードを削除するとエグゼキュートノンクエリーにて『システムエラー』となり、やはり上手く動作していないようです。

同様にOdbcDataAdapterを使う方法も試してみましたが上手くいきませんでした。

DBアクセスの方法はいくつかあると思いますが、SELECT句と同様の方法でINSERT、UPDATEも行いたいのですが、どうすれば良いのでしょうか?

環境
OS WIN2K
VS.Net Professional(VB)
DB SqlServer2K

A 回答 (1件)

Public Sub psubDbWriteK(ByVal strSql As String)



  Dim odbSysd As New OdbcConnection(gstrSysd)
  odbSysd.Open() →ここでコネクションオープン
  Dim odbCom As New OdbcCommand(strSql, odbSysd) ←ここで↑のコネクションセット

  odbCom.Connection.Open() ←ここでまたコネクションオープンしようとしている
  odbCom.ExecuteNonQuery()
  odbSysd.Close()

End Sub

なので2度目のコネクションオープンを削除すればいいと思いますよ。

この回答への補足

前述にありますように、コネクションオープンを削除するとシステムエラーが発生します。

はっ!
もしやただのSQLエラーなのでしょうか><

チョット調べてみます。(-_-;)

補足日時:2008/09/17 14:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!