- PR -

Select文を利用してDataGridにデータを表示したい

投稿者投稿内容
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-10-24 11:20
引用:

はなさんの書き込み (2005-10-24 10:42) より:
sqlda.Fill(ds);
DataGrid1.DataSource = userRegDS;
DataGrid1.DataBind();



dsにfillするなら、DataSourceにはdsを設定しましょう。
userRegDSをDataSourceに設定するなら、userRegDSにFillしましょう。
はな
常連さん
会議室デビュー日: 2005/10/21
投稿数: 20
投稿日時: 2005-10-24 13:48
NAL-6295さん

ご指摘ありがとうございます。

SqlConnection sqlcon = new SqlConnection();
sqlcon.ConnectionString = "connectionString(接続するためのストリング)";
SqlDataAdapter sqlda = new SqlDataAdapter ("SELECT * FROM tableName WHERE (a = 1) AND (b = 2) AND (c = 3) AND (d = 4)",sqlcon);

sqlda.Fill(ds);
DataGrid1.DataSource = ds;
DataGrid1.DataBind();

で、dsにFillしました。
はな
常連さん
会議室デビュー日: 2005/10/21
投稿数: 20
投稿日時: 2005-10-24 14:03
はなです。

質問です。

sqlcon.Open();
sqlcon.Close();

というステートメントが、ない、ということが、
うまくデータベースからデータをSELECT出来ない理由ってことはあるのでしょうか?

この

sqlcon.Open();
sqlcon.Close();

が書かれている場合と書かれていない場合の例を見るのですが、この違いは何なのでしょうか?

すみませんが、ご教授お願いいたします。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-10-24 14:19
こんにちわ。

引用:

はなさんの書き込み (2005-10-24 14:03) より:
はなです。

質問です。

sqlcon.Open();
sqlcon.Close();

というステートメントが、ない、ということが、
うまくデータベースからデータをSELECT出来ない理由ってことはあるのでしょうか?

この

sqlcon.Open();
sqlcon.Close();

が書かれている場合と書かれていない場合の例を見るのですが、この違いは何なのでしょうか?

すみませんが、ご教授お願いいたします。


DataAdapterのFillメソッドはなかなか賢くて、
接続が開いていない場合は勝手に接続して実行後切断してくれる、
接続が既に開いている場合はその接続を使い、実行後も接続を保持する、
というつくりになっています。

あらかじめ接続するのは、同じ接続を使って複数のSELECT文を実行したい時などに使います。
ただし、確実に切断するため、try〜finallyを使うのが一般的です。
DataAdapterについてはADO.NET基礎口座の第4章がおすすめです。
はな
常連さん
会議室デビュー日: 2005/10/21
投稿数: 20
投稿日時: 2005-10-24 15:41
ぼのぼのさん

ありがとうございます。

DataAdapterのFillメソッドはなかなか賢くて、
接続が開いていない場合は勝手に接続して実行後切断してくれる、
接続が既に開いている場合はその接続を使い、実行後も接続を保持する、
というつくりになっています。

ということですが、私のコードにBreakを張って確認したところ、sqlConnectionのstateがclosedになっていました。
これがきちんとSELECT文でデータをセレクトできない理由の一つになりうるのでしょうか?

ちなみに、
sqlcon.Open();
sqlcon.Close();
をコードに入れると、sqlConnectionのstateはOpenになっていました。

よろしくお願いいたします。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-10-24 16:13
NAL-6295です。

そういえば、DataSourceにDataSetを設定する場合、
DataMemberプロパティに表示したいテーブル名を設定する必要があったように思いますが、
そちらは設定されているのでしょうか。
はな
常連さん
会議室デビュー日: 2005/10/21
投稿数: 20
投稿日時: 2005-10-24 16:25
はなです。

NAL-6295さん

お返事ありがとうございます。

DataMemberプロパティというのは、DataGridのプロパティでよいでしょうか?
それでしたら、テーブル名が設定されていました。

よろしくお願いいたします。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-10-25 16:47
引用:

はなさんの書き込み (2005-10-24 15:41) より:

DataAdapterのFillメソッドはなかなか賢くて、
接続が開いていない場合は勝手に接続して実行後切断してくれる、
接続が既に開いている場合はその接続を使い、実行後も接続を保持する、
というつくりになっています。

ということですが、私のコードにBreakを張って確認したところ、sqlConnectionのstateがclosedになっていました。
これがきちんとSELECT文でデータをセレクトできない理由の一つになりうるのでしょうか?

ちなみに、
sqlcon.Open();
sqlcon.Close();
をコードに入れると、sqlConnectionのstateはOpenになっていました。

よろしくお願いいたします。


接続して切断するのは、Fillメソッドの内部ですから、これは正しい動作です。
なので原因は他のところにあると思います。ほんとにセレクトできてないのかな?

試しに、画面上に一時的にラベルを二つ置いて、sqlda.Fill(ds); の後に、

Label1.Text = ds.Tables(0).TableName;
Label2.Text = ds.Tables(0).Rows.Count.ToString();

て書いてみてください。ラベルにはなんて表示されますか?

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