C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: SQL文の結果をテキストボックスに表示するには


(過去ログ 83 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■49248 / inTopicNo.1)  SQL文の結果をテキストボックスに表示するには
  
□投稿者/ teru (11回)-(2010/04/28(Wed) 01:28:48)

分類:[.NET 全般] 

お世話になります。

現在Sql文で列の合計を取得しまして、その合計値をテキストボックスに表示させたいのですが、
どうすればよいでしょうか?
調べたところバインドを使用するのかと思い、以下のようにしてみました(途中省略はご了承下さい)

dAdp = new SqlDataAdapter("select sum(収支) from M_SCORE where 日付 BETWEEN '2010/04/01' AND '2010/04/30'", cn);
dAdp.Fill(dset, "M_SCORE");

textBox1.DataBindings.Add("Text", dset.Tables["M_SCORE"], "収支");

のようにしてみたところ、"収支"列の一番上の行のデータだけがテキストボックスに表示されてしまいました。
これを収支の合計をテキストボックスに表示させたいと思います。

よろしくお願いします。
引用返信 編集キー/
■49249 / inTopicNo.2)  Re[1]: SQL文の結果をテキストボックスに表示するには
□投稿者/ かたぎり (19回)-(2010/04/28(Wed) 08:57:19)
プログラムにあるSQLをSQLServerのクエリで実際に動かしてみれば判るのですが、

select sum(収支) from M_SCORE where 日付 BETWEEN '2010/04/01' AND '2010/04/30'

sum(収支) として、結果の合計値である、1行のみのレコードが返ってきていると思います。
よって、書かれているプログラムで、合計値を表示する、という目的は達成できているのではありませんか?

最初の1行の最初の1列のみで目的の結果を取得できるのでしたら、SqlCommand.ExecuteScalar の方が便利ですけれどもね。
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.executescalar(v=VS.80).aspx

FillしたDataTableの特定列の全データをTextBoxに表示したいなら、また話は別ですけれど
ご提示いただいているプログラムを見る限りではそうでもないように思いました。
引用返信 編集キー/
■49253 / inTopicNo.3)  Re[2]: SQL文の結果をテキストボックスに表示するには
□投稿者/ teru (12回)-(2010/04/28(Wed) 10:47:29)
No49249 (かたぎり さん) に返信
> プログラムにあるSQLをSQLServerのクエリで実際に動かしてみれば判るのですが、
>
> select sum(収支) from M_SCORE where 日付 BETWEEN '2010/04/01' AND '2010/04/30'
>
> sum(収支) として、結果の合計値である、1行のみのレコードが返ってきていると思います。
> よって、書かれているプログラムで、合計値を表示する、という目的は達成できているのではありませんか?
>

はい。クエリ結果自体は求めるものになっているのですが、
その結果をテキストボックスに表示するにはどうすればよいのでしょうか?

> 最初の1行の最初の1列のみで目的の結果を取得できるのでしたら、SqlCommand.ExecuteScalar の方が便利ですけれどもね。

ということはここは無理せずSqlCommand.ExecuteScalarの方を使用すればいいのでしょうか?

> FillしたDataTableの特定列の全データをTextBoxに表示したいなら、また話は別ですけれど
> ご提示いただいているプログラムを見る限りではそうでもないように思いました。

はい。列の全データではなく列の合計値だけを表示したいと思っています。
引用返信 編集キー/
■49260 / inTopicNo.4)  Re[1]: SQL文の結果をテキストボックスに表示するには
□投稿者/ こくぶん (56回)-(2010/04/28(Wed) 13:00:04)
No49248 (teru さん) に返信
>                 dAdp = new SqlDataAdapter("select sum(収支) from M_SCORE where 日付 BETWEEN '2010/04/01' AND '2010/04/30'", cn);
>                 dAdp.Fill(dset, "M_SCORE");
> 
>                 textBox1.DataBindings.Add("Text", dset.Tables["M_SCORE"], "収支");
> 
> のようにしてみたところ、"収支"列の一番上の行のデータだけがテキストボックスに表示されてしまいました。

本当にこの動作になりましたでしょうか?
この書き方だと、「DataSourceのプロパティまたは列 収支 にバインドできません。」のエラーが起きると思うのですが。。。


集計結果をバインドしたいのであれば、

  dAdp = new SqlDataAdapter("select sum(収支) as "収支合計" from M_SCORE where 日付 BETWEEN '2010/04/01' AND '2010/04/30'", cn);
  dAdp.Fill(dset, "M_SCORE");
  textBox1.DataBindings.Add("Text", dset.Tables["M_SCORE"], "収支合計");

と集計フィールドに別名を付けてバインドしてあげればよいと思います。

引用返信 編集キー/
■49268 / inTopicNo.5)  Re[2]: SQL文の結果をテキストボックスに表示するには
□投稿者/ teru (13回)-(2010/04/28(Wed) 14:33:27)
No49260 (こくぶん さん) に返信
> ■No49248 (teru さん) に返信
>> dAdp = new SqlDataAdapter("select sum(収支) from M_SCORE where 日付 BETWEEN '2010/04/01' AND '2010/04/30'", cn);
>> dAdp.Fill(dset, "M_SCORE");
>>
>> textBox1.DataBindings.Add("Text", dset.Tables["M_SCORE"], "収支");
>>
>>のようにしてみたところ、"収支"列の一番上の行のデータだけがテキストボックスに表示されてしまいました。
>
> 本当にこの動作になりましたでしょうか?
> この書き方だと、「DataSourceのプロパティまたは列 収支 にバインドできません。」のエラーが起きると思うのですが。。。

もう一度試してみたのですが、やはり収支列の一番上の行のデータのみがテキストボックスに表示されました。

> 集計結果をバインドしたいのであれば、
>
> dAdp = new SqlDataAdapter("select sum(収支) as "収支合計" from M_SCORE where 日付 BETWEEN '2010/04/01' AND '2010/04/30'", cn);
> dAdp.Fill(dset, "M_SCORE");
> textBox1.DataBindings.Add("Text", dset.Tables["M_SCORE"], "収支合計");
>
> と集計フィールドに別名を付けてバインドしてあげればよいと思います。

サンプルありがとうございます。

ちなみにこれだとDataGridViewの一番右側に新しい列が作成されて、その部分に合計結果が出てしまいます。
この合計をテキストボックスに表示するにはSqlCommand.ExecuteScalarクラスを用いた方がよいのでしょうか?
引用返信 編集キー/
■49270 / inTopicNo.6)  Re[3]: SQL文の結果をテキストボックスに表示するには
□投稿者/ こくぶん (57回)-(2010/04/28(Wed) 15:26:10)
No49268 (teru さん) に返信
> ちなみにこれだとDataGridViewの一番右側に新しい列が作成されて、その部分に合計結果が出てしまいます。

集計用のデータテーブルを DataGridView のデータテーブルと別にすればよいかと。

  dAdp1 = new SqlDataAdapter("※DataGridViewに出力するデータを取得する SQL 文", cn);
  dAdp2 = new SqlDataAdapter("select sum(収支) as "収支合計" from M_SCORE where 日付 BETWEEN '2010/04/01' AND '2010/04/30'", cn);
  dAdp.Fill(dset, "M_SCORE");
  dAdp.Fill(dset, "TOTAL"); // 集計結果を別のデータテーブルに格納する

  // DataGridView に M_SCORE の内容をバインド
  dataGridView1.DataSource = dset.Tables["M_SCORE"];
  // TextBox に収支合計をバインド
  textBox1.DataBindings.Add("Text", dset.Tables["TOTAL"], "収支合計");


もしくは、 ExecuteScalar を使って、

  cmd = new SqlCommand("select sum(収支) from M_SCORE where 日付 BETWEEN '2010/04/01' AND '2010/04/30'", cn);
  textBox1.Text = cmd.ExecuteScalar().ToString();

引用返信 編集キー/
■49272 / inTopicNo.7)  Re[4]: SQL文の結果をテキストボックスに表示するには
□投稿者/ teru (14回)-(2010/04/28(Wed) 16:36:11)
No49270 (こくぶん さん) に返信
> ■No49268 (teru さん) に返信
>>ちなみにこれだとDataGridViewの一番右側に新しい列が作成されて、その部分に合計結果が出てしまいます。
>
> 集計用のデータテーブルを DataGridView のデータテーブルと別にすればよいかと。

なるほど!そうですよね。データテーブルを別にすればいいですね。
まさにこれです。ありがとうございます。

> dAdp1 = new SqlDataAdapter("※DataGridViewに出力するデータを取得する SQL 文", cn);
> dAdp2 = new SqlDataAdapter("select sum(収支) as "収支合計" from M_SCORE where 日付 BETWEEN '2010/04/01' AND '2010/04/30'", cn);
> dAdp.Fill(dset, "M_SCORE");
> dAdp.Fill(dset, "TOTAL"); // 集計結果を別のデータテーブルに格納する
>
> // DataGridView に M_SCORE の内容をバインド
> dataGridView1.DataSource = dset.Tables["M_SCORE"];
> // TextBox に収支合計をバインド
> textBox1.DataBindings.Add("Text", dset.Tables["TOTAL"], "収支合計");
>
>
> もしくは、 ExecuteScalar を使って、
>
> cmd = new SqlCommand("select sum(収支) from M_SCORE where 日付 BETWEEN '2010/04/01' AND '2010/04/30'", cn);
> textBox1.Text = cmd.ExecuteScalar().ToString();

私もExecuteScalarを使ってコード組んでしまいました(汗

上記方法で行いたいと思います。
本当にありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -