- PR -

OleDBcommandのパラメータを複数使う場合は?

1
投稿者投稿内容
Wandayu
会議室デビュー日: 2003/11/05
投稿数: 10
投稿日時: 2003-11-17 17:36
こんにちは

現在SQL Server 2000とVB.NETを使用しています。
OleDBconnectでSQL ServerにデータをInsertしているのですが、


OLEcmd.CommandText = "Insert into Table " & _
"(Field1,Field2・・・,Field40) " & _
"Values (?,?,?・・・)
OLEcmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("Field1", "Value"))
OLEcmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("Field2", "Value"))




上記のように記述しています。
しかし、数が多くなるとどのパラメータが何番目かわからず管理し難いです。
SQLCommandはパラメータに「@」を付けて区別できるようですが、
OLEDBCommandの場合はパラメータは記述順に使用するしかないのでしょうか?

詳しい方がいましたらアドバイスお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-18 09:17
 SQL Server 2000を使用しているのであれば、SqlCommandを使用すればよいのでは?

 OleDbはODBCを元にしているので、ODBCが名前付きパラメータをサポートしていないため、サポートされていません。
Wandayu
会議室デビュー日: 2003/11/05
投稿数: 10
投稿日時: 2003-11-18 10:05
こんにちは

SqlCommandを使わない理由は
いずれリンクサーバーでDB2も参照したいからです。
おそらく、SqlCommandだとうまくいきません。

回答どうもありがとうございます。
大人しく順番通りにパラメータを使おうと思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-18 11:38
引用:

Wandayuさんの書き込み (2003-11-18 10:05) より:

SqlCommandを使わない理由は
いずれリンクサーバーでDB2も参照したいからです。
おそらく、SqlCommandだとうまくいきません。


 SQL文は一緒でよかったですか?
 私はSQL ServerとOracleに対応させるため、いろいろ苦労していますが。
ジェミニ
常連さん
会議室デビュー日: 2003/08/26
投稿数: 33
投稿日時: 2003-11-18 13:21
こんにちは。
もしかすると的外れかもしれませんが、僕がINSERT,UPDATEする時の事を書いておきます。

VB.NETを使われているという事なので・・・
画面でOleDbAdapterのプロパティでInsertCommandのParameters(コレクション)のメンバに
DBの項目を追加して、ソースからは

' データベースOPEN
Me.OleDbConnection1.Open()
' 既存のテーブルクリア
Me.DataSet11.Tables("AAAA").Clear()
' データセット
With Me.OleDbDataAdapter1.InsertCommand.Parameters
.Item(0).Value = Item1
.Item(1).Value = Item2
.Item(2).Value = Item3
.Item(3).Value = Item4
.Item(4).Value = Item5
.Item(5).Value = Item6
End With
Me.OleDbDataAdapter1.InsertCommand.ExecuteNonQuery()

という感じでやっています。
これだと、たくさん項目があってもあまり苦労しないと思います。

もし、的外れなスレだったらごめんなさい。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-11-18 14:23
Wandayuさん、こんにちは。

引用:

SqlCommandを使わない理由は
いずれリンクサーバーでDB2も参照したいからです。
おそらく、SqlCommandだとうまくいきません。


リンクサーバーを使用するんですよね?
という事は、SQL ServerがDB2と接続するのであって、クライアントから直接DB2に接続するわけではありませんから、System.Data.SqlClient のクラスを使用しても構わないはずです。

リンクサーバー自体、SQL Server のクライアントに、透過的に他のDBへのアクセスを提供する仕組みなので、基本的にSQL Server の SQL構文もそのまま通ります。
Wandayu
会議室デビュー日: 2003/11/05
投稿数: 10
投稿日時: 2003-11-18 15:18
こんにちは
ジェミニさん
返答ありがとうございます。

こういう方法もあるのですね。参考になります。
ためしに、

引用-----------------------------------------------
With Me.OleDbDataAdapter1.InsertCommand.Parameters
.Item(0).Value = Item1
---------------------------------------------------

の部分を
.Item("パラメータ名").Value = Item1
にしたところうまくいきました。

どうもありがとうございました。
Wandayu
会議室デビュー日: 2003/11/05
投稿数: 10
投稿日時: 2003-11-18 15:31
きくちゃんさん
こんにちは

リンクサーバーの件ではお世話になりました。
どうも私の調査不足のようですね。
SQLcommandを使うことによる不具合が無い以上
OLEDBcommandを無理に使う必要はないのかもしれません。

アドバイスどうもありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)