タイトル一覧   関連タグ: Win C#
タグ:Win C# タイトル:ODBCでのストアドプロシージャ
1
1:  お名前:Genomu 2005/07/14 16:55:15

はじめまして。

以下のような形で、ソースコード的にSQLを扱おうと思っているのですが、どうもストアドプロシージャが巧く通ってくれません。


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

OdbcConnection Conn;
OdbcCommand Com;

Conn.ConnectionString = "DBに接続できる文字列"
Com.Connection = Conn;


OdbcDataReader d;

Com.CommandText = "[ストアドプロシージャ名称]";
Com.CommandType = CommandType.StoredProcedure;

Conn.Open();
d = Com.ExecuteReader();


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

最終行 d = Com.ExecuteReader(); の部分で例外が発生してしまいます。
SQLConnectionのときはこの書き方で巧くいったのですが、ODBCにしてからどうしても巧くいきません。
また、

Com.CommandText = "[SQL直記述]";
Com.CommandType = CommandType.Text;

にすると、巧く通ることは確認しております。



実行しているコンピュータはWindowsXP(クライアント)で、ストアドプロシージャはUNIX(サーバ)にあります。
WindowsXPからUNIXにあるSQLを叩き、UNIXからデータを引っ張り出したいという内容です。


どうぞよろしくお願いします。

※SQL Server使えばいい、とか他のものを使えばいい、といったのは今回の案件に反しますので、ご容赦ください。
2:  お名前:みゃみゅ玉子 2005/07/14 17:06:29

みゃみゅ玉子です。

ひょっとしたら、CALLから書けばうまくいったりしませんか?
CALL ストアドプロシージャ
みたいに。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconusingstoredprocedureswithcommand.asp

# そういうことじゃないのかなぁ・・・?

3:  お名前:菊池 2005/07/14 17:41:21

いや、[ ] が要らないだけかと…

StoredProcedureをCommandTypeに指定してるのは[]とかが必要ならつけてくれと ADO.NETにお願いしたって事ですから。

4:  お名前:Genomu 2005/07/15 9:06:14

お二方、ご回答ありがとうございます。

まず

Com.CommandText = "[SQL直記述]";
Com.CommandType = CommandType.Text;



Com.CommandText = "SQL直記述";
Com.CommandType = CommandType.Text;

の間違いであったので、失礼いたしました。



Com.CommandText = "call [ストアドプロシージャ名称]";
Com.CommandText = "call ストアドプロシージャ名称";
Com.CommandText = "[call ストアドプロシージャ名称]";
Com.CommandText = "ストアドプロシージャ名称";

と、4通り試してみましたがいずれもtry~catchで引っかかってしまいます。

今やろうとしていることは、もしかして他に実践している方がいらっしゃらない、奇特なことをしようとしているのでしょうか…(汗
5:  お名前:菊池 2005/07/15 9:58:31

>Com.CommandText = "call [ストアドプロシージャ名称]";
>Com.CommandText = "call ストアドプロシージャ名称";
>Com.CommandText = "[call ストアドプロシージャ名称]";
>Com.CommandText = "ストアドプロシージャ名称";

 それぞれ、CommandType には何を指定しましたか?

Com.CommandType = CommandType.StoredProcedure;
Com.CommandText = "StoredProcName";

 であるか

Com.CommandType = CommandType.Text;
Com.CommandText = "exec StoredProcName";

 であるべきです。
 後者の場合にストアド名がSQLの予約語等を含む場合には [ ] でエスケープする必要があるかもしれません。

>と、4通り試してみましたがいずれもtry~catchで引っかかってしまいます。

 メッセージは何と出るのですか?

 UNIXサーバで動作しているRDBMSの製品名及びバージョンはわかりませんか?
 UNIXサーバで動作しているRDBMSの種類によってはストアドプロシジャを呼ぶ為に利用する構文が違ったり、そもそもストアドプロシジャの無いDBMSもあります。

例)
 PostegreSQL には ストアドプロシジャは存在せずすべてをユーザ定義関数として扱います。このため call 文は存在しません。
http://www.postgresql.jp/document/pg803doc/html/


6:  お名前:ブランド偽物 2020/02/23 7:13:12

サイフを購入したのですが、発送~受け取りまでとてもスムーズでした。梱包もしっかりしていて、袋でしたが箱が左右に動かないようにエアキャップを詰めてあったり、手紙が添えてあったりと、とても心遣いを感じられて気持ち良く買い物できました!また機会があればこちらで購入したいと思います(^_^)ありがとうございました!
ブランド偽物 https://www.gmt78.com/product/detail/12133.htm
1
お名前
メッセージ
次回のために入力情報を記録