トップ回答者
テーブル型のストアドパラメータは ODBC 経由で渡せますか?

質問
-
SQL Server 2008 から、ストアドプロシージャーのパラメータにテーブル型を
指定できるようになりました。
これにより、IN句 の値を パラメータで指定することが簡単になりました。
さて、このような テーブル型をパラメータに指定するストアドプロシージャーを
ODBC 経由で実行したいと思いますが、方法が分かりません。
具体的には、以下のようなコードを実行するとエラーが発生します。
DataTable dt = new DataTable();dt.Columns.Add("id",typeof(Int32));
DataRow dr ;
dr = dt.NewRow();
dr["id"] = 1;
dt.Rows.Add(dr);dr = dt.NewRow();
dr["id"] = 2;
dt.Rows.Add(dr);OdbcDataAdapter odbcDA = new OdbcDataAdapter();
m_ODBCCONN = new OdbcConnection(CONNECTIONSTRING);OdbcCommand odbcCmd = new OdbcCommand("TESTPROCEDURE", ODBCCONN);
odbcCmd.CommandType = CommandType.StoredProcedure;//パラメータ数に基づいて、引数を定義します
odbcCmd.Parameters.AddWithValue("@v", dt);
ODBCCONN.Open();
DataTable dtResultData = new DataTable();//OdbcDataAdapter形式にてデータを取得します
odbcDA.SelectCommand = odbcCmd;
odbcDA.Fill(dtResultData); ← ここでエラーになります。ODBCCONN.Close();
エラーメッセージは、以下です。
オブジェクトの型 System.Data.DataTable から既知のマネージ プロバイダのネイティブ型へのマップがありません。ODBC 経由でテーブル型のパラメータを渡す方法の情報が見当たらず、
できるのか、できないのかも判断ができません。
IN句 にパラメータで、可変な複数値を渡す必要があるのですが、
開発環境がODBC経由でしかDBにアクセスできず、
またFunction の作成も難しい状況です。
この テーブル型 のパラメータ だけが頼りです。
ODBC経由で 使用する方法がありましたら、ご教授ください。よろしくおねがいします。
回答
すべての返信
-
まず、.NET Framework 3.5以上の環境であることを確認してみて下さい。
そうであれば、以下のようにするとうまくいくかもしれません。
OdbcParameter param = command.Parameters.Add("@v", SqlDbType.Structured);
param.Value = table;
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
.NET Framework 3.5 以上の環境で 試してみましたが、
同じ エラー が発生しました。
ODBC 経由では テーブル型の パラメータを使用できないのでしょうか。。