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

【C#・MSSQL】COUNTの結果をINSERTしたい

投稿者投稿内容
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2006-09-22 11:33
お世話になります。

SQLで日付が一致するデータの数を数えて、その数をテーブルに格納したいと考えています。
そこで、次のような文章を書きました。

--------------------------------------
string testCmd ="SELECT count(*) FROM 情報 where 日付=txtDateDT";

sqlCommandDB.Parameters.AddWithValue("@DataID", testCmd);
sqlCommandDB.Parameters.AddWithValue("@DataDate", txtDateDT.ToString());
sqlCommandDB.CommandText = "INSERT INTO 情報 VALUE (@DataDate,@DataID)";

sqlReaderDB = sqlCommandDB.ExecuteReader();
--------------------------------------

ですが、最後のExecuteReaderの箇所で、
「VALUEの近くに無効な構文があります。」
といったメッセージが表示されてしまいます。

カウントした数をテーブルに格納するためには、
どうすれば良いのでしょうか?
ご回答よろしくお願いいたします。
ta
会議室デビュー日: 2006/07/22
投稿数: 9
投稿日時: 2006-09-22 11:37
C#はわからないですが、 sqlCommandDB.ExecuteNonQueryで実行されるといいと思います
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2006-09-22 11:55
さっそくのご回答ありがとうございます。

ご指摘の通り変更してみましたが、
「型 'int' を型 'System.Data.SqlClient.SqlDataReader' に暗黙的に変換できません。」
と表示されて中断してしまいました……。
ta
会議室デビュー日: 2006/07/22
投稿数: 9
投稿日時: 2006-09-22 12:10
sqlReaderDB = sqlCommandDB.ExecuteNonQuery
とされてませんか?

データリーダーは返さないようにされればいいんじゃないかとおもいます。

sqlCommandDB.Parameters.AddWithValue("@DataID", testCmd);
sqlCommandDB.Parameters.AddWithValue("@DataDate", txtDateDT.ToString());
sqlCommandDB.CommandText = "INSERT INTO 情報 VALUE (@DataDate,@DataID)";

sqlCommandDB.ExecuteNonQuery();

burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-09-22 12:13
そもそも
SELECT COUNT(*)とINSERT文は分けて発行してるのでしょうか?
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-09-22 12:15
引用:

じゃんぬねっとさんの書き込み (2006-09-22 12:14) より:
根本的な原因はむしろ以下の部分でしょう。

引用:

Wingardさんの書き込み (2006-09-22 11:33) より:

「VALUEの近くに無効な構文があります。」といったメッセージが表示されてしまいます。


C# とは関係のない SQL の構文エラーです。
正しくは、'VALUES' でしょう。





全く気づかなかった_| ̄|○
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-09-22 12:20
ごめんなさい、burton999 さんに物言いしているように見えてしまったので、削除してしまいました。

引用:

Wingardさんの書き込み (2006-09-22 11:33) より:

「VALUEの近くに無効な構文があります。」といったメッセージが表示されてしまいます。

引用:

taさんの書き込み (2006-09-22 12:10) より:

sqlCommandDB.CommandText = "INSERT INTO 情報 VALUE (@DataDate,@DataID)";


C# や .NET Framework どうこう以前に SQL の構文エラーです。
正しくは、'VALUES' でしょう。

それと、最初の testCmd が用意されている意味がよくわかりません。
SELECT コマンドを組み立てた後に、INSERT コマンド...? (;~_~)

あ、同時にやろうとしているんでしょうか...?
@DataID パラメータに COUNT の結果を入れたいということですか...

[ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2006-09-22 12:24 ]
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-09-22 12:25
引用:

ごめんなさい、burton999 さんに物言いしているように見えてしまったので、削除してしまいました。



そんなことないですよ。
私なんぞに気遣いは無用ですぜ(・∀・)

本題ですが、
INSERT文のVALUESにSELECT COUNT(*) の結果を直で挿入しようとしてるっぽですけど、そんなことはできないのでは?
まずCOUNT(*)を取得して、その後、INSERTってのが普通かと。

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