DOBON.NET DOBON.NETプログラミング掲示板過去ログ

PREPARE文を使用して追加を行う

環境/言語:[WindowsNT VB.NET .NETFramework1.1]
分類:[.NET]

はじめまして。
がちゃぴんと申します。
いつもこのサイトを参考にさせて頂いています。

現在VB.NETからODBC接続でIBM Informix7.31のデータベースへレコードを追加しようとしています。
しかし7.31では列に文字列を追加する場合の制限があり、256を超えたものは追加できません。
調べているとPREPARE文を使用すると追加できるという情報がありました。
WEB等で調べてはみたのですが、うまくいかず悩んでいます。。

PREPAREであらかじめinsert文を指定し(値はパラメータにしておく),
EXECUTEでパラメータを設定する方法等あったのですが、
.NETでどのようにコーディングすればよいかよくわかりません。

どなたかご存知の方がおられたらアドバイスをいただけないでしょうか?
宜しくお願い致します。
どの様なロジックをかかれて試行錯誤されたのか分かりませんが、

パラメータに対して値を設定するために
XXXCommandクラスのCreateParameterメソッドを使って設定すれば
良いのではないでしょうか?

(XXXXは=OdbcだったりOleDbだったり、がちゃぴんさんが使用している
クラスにより変わります)
封真さん 返信ありがとうございました。

説明不足で申し訳ありません。
下記のように追加しようとしております。

---- コード ------------------------------------------------------

 Dim rConn As OdbcConnection = New OdbcConnection("DSN=XXX")
rConn.Open()

Dim comm As OdbcCommand = New OdbcCommand("", rConn)

'パラメータ設定
comm .CommandText = "insert into テーブル名 (項目1,項目2) values (@A,@B)"
command.Parameters.Add("@A", 10)
command.Parameters.Add("@B", "sss")
command.Prepare()
command.ExecuteNonQuery()

 '実際に値を設定して追加を行う
command.Parameters(0).Value = 21
command.Parameters(1).Value = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
command.ExecuteNonQuery()

------------------------------------------------------------------------

しかし「command.Prepare()」を実行しようとすると、エラーになってしまいます。
エラー内容は、「System.Data.Odbc.OdbcException
at System.Data.Odbc.OdbcConnection.HandleError(HandleRef hrHandle, SQL_HANDLE hType, RETCODE retcode)」です。
封真さんにアドバイスを頂いた「CreateParameterメソッド」を使わずに
パラメーターを追加設定しようとしているからなのでしょうか・・・
コード上で不足がありましたら指摘していただければと思います。
申し訳ありませんが、宜しくお願い致しますm(_ _)m
■No12711に返信(がちゃぴんさんの記事)
> 封真さん 返信ありがとうございました。
> > ---- コード ------------------------------------------------------
> >  Dim rConn As OdbcConnection = New OdbcConnection("DSN=XXX")
> rConn.Open()
> > Dim comm As OdbcCommand = New OdbcCommand("", rConn)
> > 'パラメータ設定
> comm .CommandText = "insert into テーブル名 (項目1,項目2) values (@A,@B)" > command.Parameters.Add("@A", 10)
> command.Parameters.Add("@B", "sss")
> command.Prepare()
> command.ExecuteNonQuery()
> >  '実際に値を設定して追加を行う
> command.Parameters(0).Value = 21
> command.Parameters(1).Value = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> command.ExecuteNonQuery()
> > ------------------------------------------------------------------------

提示してくれたソースでcommandの変数がいきなり出てきているのは何故でしょうか・・・?
で、commandにParameters.Addがついていたので、
commandがOdbcDataAdapterではないかと推測してみました。

このMSDNのページは参考になりますでしょうか?
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataodbcodbcdataadapterclassctortopic.asp
封真さん返信ありがとうございました。
教えていただいたMSDNのページを参考にし、問題を解決することができました。
ありがとうございました。
下記がコードです。

 Dim myConn As New OdbcConnection("DSN=XXXX")
myConn.Open()

Dim myComm As New OdbcCommand("", myConn)

myComm.CommandText = "insert into テーブル名 (項目1,項目2) VALUES (10,?);"

myComm.Parameters.Add("KOUMOKU2", OdbcType.Char, 256, "項目2")

myComm.Parameters("KOUMOKU2").Value = "てすと"

myComm.ExecuteNonQuery()
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板