@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

odbc接続について

1
投稿者投稿内容
まゆみ
会議室デビュー日: 2006/10/08
投稿数: 3
投稿日時: 2006-10-08 21:47
こんばんは。
はじめまして。
まゆみです。

asp.net2.0(言語vb)で開発を行っています。
以前までsql2000サーバでSqlConnectionを使用して接続を行っていました。

Dim aaaStr As String = Nothing
Dim aaaDb As SqlConnection = Nothing
Dim aaaCom As SqlCommand = Nothing
Dim aaaDr As SqlDataReader = Nothing

aaaChkStr = ConfigurationManager.ConnectionStrings("DBConect").ToString
aaanChkDb = New SqlConnection(WEBLoginChkStr)

aaaCom = New SqlCommand _
("SELECT a,b,d,e,f FROM " & _
ConfigurationManager.AppSettings("aaaDB") & " .." & _
ConfigurationManager.AppSettings("aaaTable") & "WHERE aaa=@aaa and " & _
"bbb like @bbb", aaaDb)

aaaCom.Parameters.AddWithValue("@aaa", 123)
aaaCom.Parameters.AddWithValue("@bbb", 456)
aaaDb.Open()

  〜省略〜
  aaaDb.close()

しかし、odbcで接続しなくてはいけなくなり以下の様に記載して行いました。

Dim aaaStr As String = Nothing
Dim aaaDb As OdbcConnection = Nothing
Dim aaaCom As OdbcCommand = Nothing
Dim aaaDr As OdbcDataReader = Nothing

aaaChkStr = ConfigurationManager.ConnectionStrings("DBConect").ToString
aaanChkDb = New OdbcConnection(WEBLoginChkStr)

aaaCom = New OdbcCommand _
("SELECT a,b,d,e,f FROM " & _
ConfigurationManager.AppSettings("aaaDB") & " .." & _
ConfigurationManager.AppSettings("aaaTable") & "WHERE aaa=@aaa and " & _
"bbb like @bbb", aaaDb)

aaaCom.Parameters.AddWithValue("@aaa", 123)
aaaCom.Parameters.AddWithValue("@bbb", 456)
aaaDb.Open()

  〜省略〜
  aaaDb.close()

しかし「ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]変数 '@aaa' を宣言する必要があります。」
とエラーがでてしまいます。

Parameters.AddWithValueで宣言していると思いますがOdbcで行うとSqlConnectionで行うようにParameters.AddWithValueの
宣言が可能はないのでしょうか?
何卒アドバイスの程を宜しくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-10-08 22:02
引用:

まゆみさんの書き込み (2006-10-08 21:47) より:

Parameters.AddWithValueで宣言していると思いますがOdbcで行うとSqlConnectionで行うようにParameters.AddWithValueの宣言が可能はないのでしょうか?


問題の本質は、こちらではないかもしれませんよ。

引用:

WHERE aaa=@aaa and bbb like @bbb", aaaDb)


'@パラメータ名' ではなく '?' を使用してもダメでしょうか。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まゆみ
会議室デビュー日: 2006/10/08
投稿数: 3
投稿日時: 2006-10-08 23:04
じゃんぬねっと様

まゆみです。
こんばんは。

お早いご返事本当ありがとうございます。


アドバイス頂いた様に下記の様に行ってみました。

aaaCom = New OdbcCommand _
("SELECT a,b,d,e,f FROM " & _
ConfigurationManager.AppSettings("aaaDB") & " .." & _
ConfigurationManager.AppSettings("aaaTable") & "WHERE aaa=? and " & _
"bbb like @bbb", aaaDb)

aaaCom.Parameters.AddWithValue("@aaa", 123)
aaaCom.Parameters.AddWithValue("@bbb", 456)


そしたら今度は同じ様に「ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]変数 '@bbb' を宣言する必要があります。」
とでたので
@bbbを?にしてみました。
そしたらエラーはでなくなりました。

でもちょっと疑問です。@aaa、@bbbを?にしてなぜ@aaaだった部分が「aaaCom.Parameters.AddWithValue("@aaa", 123)」 で「@bbb」だった部分が「aaaCom.Parameters.AddWithValue("@bbb", 456)」と認識できているのでしょうか?

順番にParameters.AddWithValueを定義すればいいのでしょうか?
choir
会議室デビュー日: 2006/07/31
投稿数: 15
お住まい・勤務地: 東京都
投稿日時: 2006-10-08 23:22
http://msdn2.microsoft.com/ja-jp/library/system.data.odbc.odbccommand.parameters.aspx
>コマンド テキストのパラメータの疑問符プレースホルダの位置と、OdbcParameter オブジェクトを OdbcParameterCollection に追加する順序とを、正しく対応させる必要があります。

パラメータの数と順番が合ってれば正しく認識されるということで。
(OldDbCommandもこれと同様。SqlCommandとOralceCommandはパラメータ名での一致が必須)
1

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