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

PostgreSQLにODBCにて接続、SELECTが失敗します

1
投稿者投稿内容
piedpiper
会議室デビュー日: 2005/10/19
投稿数: 3
投稿日時: 2005-10-24 08:31
VisualStudio .NET 2003 Professional
C#.NET Windowsフォーム
WindowsXP Professional
PostgreSQL 8.0.4

SELECT * FROM test_table WHERE serial = '234';
として該当する行数を得たいのですが、結果が"-1"になってしまいます。
"-1"ということは、該当するデータが見つからないのでしょうか。
test_tableにはserialというカラムに234が正しく登録されています。
WHERE句を無くして、全件をSELECTしても結果は同じく"-1"です。
また、pgAdminVというクライアントを利用し、
上記SELECT文を発行すると、正しく1行がSELECTされます。
なぜ"-1"が返ってくるのでしょうか、よろしくお願いいたします。

private void button1_Click(object sender, System.EventArgs e){
try{
odbcConnection1.Open();
int result = odbcCommand1.ExecuteNonQuery();
MessageBox.Show(result.ToString());
odbcConnection1.Close();
}
catch(System.Data.Odbc.OdbcException error){
MessageBox.Show(error.Message);
odbcConnection1.Close();
}
}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-24 08:45
ExecuteNonQuery メソッドで SELECT 文を実行する場合は必ず -1 が返ります。
これは仕様です。

引用:

MSDN ライブラリ OdbcCommand.ExecuteNonQuery メソッド より:

UPDATE、INSERT、DELETE の各ステートメントで、戻り値はそのコマンドの影響を受ける行の数です。
その他の種類のステートメントでの戻り値は、-1 です。


# ですので、正しく行数が返る方が不思議だったりします。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
piedpiper
会議室デビュー日: 2005/10/19
投稿数: 3
投稿日時: 2005-10-24 08:49
じゃんぬねっとサンへ

早速のレスありがとうございます!
じゃんぬねっとサンの言うような仕様は、
どこで知ること出来るのでしょうか。

仕様と聞いて安心しました^^
SELECTで該当の行数を得るにはどうしたら良いのでしょうか。
よろしくお願いいたします。
piedpiper
会議室デビュー日: 2005/10/19
投稿数: 3
投稿日時: 2005-10-24 09:07
OdbcDataReader reader = odbcCommand1.ExecuteReader();
bool result = reader.HasRows;
MessageBox.Show(result.ToString());

こうしたら出来ました!
これで合ってるのでしょうか^^;
今回の事例の場合、存在するか、存在しないかがポイントなので、
上記のコードでよろしいのですが、
正確にSELECTされた行数を知るためにはどうするのでしょうか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-24 09:08
それで OK です。

# 私の言う仕様とは、先のレスでリンクが貼ってある場所のことです。(^^;)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

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