- PR -

.NET 『DataGrid』のデータ表示ついて・・・

投稿者投稿内容
なぼな
ベテラン
会議室デビュー日: 2004/08/04
投稿数: 61
投稿日時: 2004-08-04 13:12
えムナウさんありがとうございます。

接続の設定を再度行いました。
状況は変わりませんでした。
テストも完了してました。
ですが、状況はかわりません。

いったい何がおきているのでしょうか?
「なんとなく思うところは、テーブルのマッピングはできているが、
 データの取得部分の何かが欠落している」
という感じでしょうか(とても抽象的ですが・・・)

もうひとつ、えムナウさんからアドバイスいただきました、
>SqlDataAdapter1.Fill のあとに DataSet1 の内容をデバッガで確認してデータが入っていないか確認は出来るでしょうか?
ですが、SqlDataAdapterをNewしたときに確認しました。
結果、項目などのバインドはできているようですが、
DataSet1.tableMytable.count が 0になっていました。
この意味をまだ調べている途中ですが、データを取得しなかった
ことになるのでしょうか・・・
結局何が悪いかわからないままで・・・
なぼな
ベテラン
会議室デビュー日: 2004/08/04
投稿数: 61
投稿日時: 2004-08-04 17:41
わかりました×××
お騒がせして申しわけありませんでした。
多分、これでいいと思うのですが・・・

皆様のサンプルや、.NETの本などでは簡単に記述されていたのですが、
なんとなく、SqlConnectionクラスのOpenとCloseを実行してみました。
当初は、FILLの役目がわからずテキトーなところに記述しておりましたが、
ここでの他の方の掲示内容にOpen、Closeの適切そうな位置がわかりためしたら、
なんと、Open、Closeでした×××

サーバーエクスプローラが存在しているのに、どうして?という気持ちもありますが、
SQLサーバはれっきとしたRDBですので、あたりまえですね・・・

ご意見をいただいた皆様、ありがとうございました。

解決ソース
SqlConnection1.Open() <- わかってしまえば当り前、すみませんでした
SqlDataAdapter1.Fill(DataSet11)
SqlConnection1.Close()  <- わかってしまえば当り前、すみませんでした
DataGRID.DataSource = DataSet11
DataGRID.DataBind()
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-08-04 22:43
>SqlConnection1.Open() <- わかってしまえば当り前、すみませんでした
>SqlDataAdapter1.Fill(DataSet11)
>SqlConnection1.Close()  <- わかってしまえば当り前、すみませんでした
昔の動作したソースを見てみました。
Open ・ Close は不要なようですが・・・

コード:
private void Page_Load(object sender, System.EventArgs e)
{
	// ページを初期化するユーザー コードをここに挿入します。
	if ( this.IsPostBack )
	{
	}
	else
	{
		sqlDataAdapter1.Fill(dataSet11,"部品");
		DataGrid1.DataBind() ;
	}
}


_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
ZEBRA
常連さん
会議室デビュー日: 2003/04/14
投稿数: 38
投稿日時: 2004-08-05 00:31
SqlAdapterクラスは、Fill()メソッドを実行する際に、関連付けられたIDBConnection(この場合はSqlConection)のOpen、Closeは自動的に処理するはずです。

以下、SqlDataAdapterクラスのFillメソッドのヘルプから引用…
>Fill メソッドは、SELECT ステートメントを使用して、
>データ ソースからデータを取得します。
>SELECT コマンドに関連付けられた IDbConnection オブジェクトは、
>有効なものである必要がありますが、開いている必要はありません。
>Fill を呼び出す前に IDbConnection が閉じていた場合は、接続が開かれ、
>データを取得した後で再び閉じられます。
> Fill を呼び出す前に接続が開いていた場合は、接続は開いたままになります。

なんとなくでコーディングするよりも、今一度、確証のある検証をしたほうが良いと思います。
ちなみに、「ユーザがログインできない」ってことは、DB接続時に使う接続情報が足りない(おそらくパスワード)のだと思いますが、ひょっとしたらなんらかの拍子に、接続文字列は正しくなったのではないでしょうか?
恐らく解決後のソースから、Open、Closeの処理をコメントにしても動作はするような気がします。
なぼな
ベテラン
会議室デビュー日: 2004/08/04
投稿数: 61
投稿日時: 2004-08-05 15:53
えムナウさん、ZEBRAさんご意見ありがとうございます。
昨日は徹夜でこの件をやっておりましたので、果ててしまいました×

さて、「Open,Closeはいらないのでは?」 というご意見ですが、
今日になってOpen、Closeをコメントにして実行したところ、
なんと、問題なく動いてしまいました。

ZEBRAさんのおっしゃる通り、なんらかの要因で接続文字列が正しくなったのであるならば
どこのタイミングは悪くて、どこのタイミングは良いのか不明です。
いったい何が悪いのか・・・
プロパティ類はさわっていないので、何をしたという部分はないのですが・・・

実行のタイミングや、SqlConnectionのインスタンスの生成のされ方か、
クラスの生成のされ方や、タイミングなんですかね?
私がソースレベルでも、SqlConnectionインスタンスのOpenとCloseを
明示的に記述したから、動作するようになったとか・・・

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