- - PR -
データの取得方法
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-02-02 11:23
//環境
言語:Microsoft Visual Studio 2008 データベース:SQL Server 2005 接続型のデータアクセス //質問 現在,上記環境で開発を始めたところです。 そこで簡単なプログラムを取りかかったのですがすぐにつまずいてしまいました。 やりたいことは、テーブルから特定の条件のデータを取得したいのですが、 私なりに勉強してきたコーディングと、他の人とのコーディング方法が違います。 まず、私のやり方は、データベースに接続するところから始めるのですが、 他の人のやり方は、アプリケーションのプロパティの設定で既に、接続文字列を 登録済みのため、データベースのオープン処理をしないというやり方です。 その為、データベースのオープン処理をしない場合、下記のConところをどうしたらいいのか分からなくなりました。 どなたかアドバイスをいただければと思います。 <自分のコーディング> ' データベースオープン Public Con As System.Data.SqlClient.SqlConnection Con = New System.Data.SqlClient.SqlConnection() Con.ConnectionString = "Data Source=192.168.xx.xxx;Initial Catalog=TestDB;User ID=sa;Password=sa Con.Open() ' データ抽出 strsql = "SELECT CD, NAME FROM xxx WHERE (CD = '001')" Dim command As New SqlClient.SqlCommand command.Connection = Con ←データベースオープン処理がない場合、ここのconをどう記述すればいいでしょうか? command.CommandType = CommandType.Text command.CommandText = strsql Dim sr As SqlClient.SqlDataReader sr = command.ExecuteReader() command.Dispose() If Not sr.HasRows Then Else While sr.Read TXT_NAME.Text = sr("NAME").ToString() End While End If sr.Close() <他の人のコーディング>これでデータベースをオープンしなくてもデータの読み込みができます。 Using tAdpter As MyAppDataSetTableAdapters.xxxTableAdapter _ = New MyAppDataSetTableAdapters.xxxTableAdapter, _ hAdpter As Data.SqlClient.SqlDataAdapter _ = New Data.SqlClient.SqlDataAdapter(), _ wTBL As MyAppDataSet.xxxDataTable _ = New MyAppDataSet.xxxDataTable strsql = "SELECT CD, NAME FROM xxx WHERE (CD = '001')" Using DBConnection = tAdpter.Connection hAdpter.SelectCommand = DBConnection.CreateCommand hAdpter.SelectCommand.CommandText = strsql hAdpter.Fill(wTBL) If wTBL.Rows.Count > 0 Then TXT_NAME.Text = wTBL.Item(0).NAME End If End Using End Using | ||||
|
投稿日時: 2009-02-02 11:32
「接続文字列を登録済みだから」ってのは正確ではないですね。 非接続型データアクセスであるテーブルアダプタを使用しているため、接続オープンを明示的に行わないで良い、 というのが適切な表現かと。 明示的に行わなくて良いだけで、内部的には一時的に接続を開いています。 一方、chiroru さんのように SqlCommand を直接使用する方法は、接続型データアクセスです。 接続型データアクセスの場合、明示的な接続オープンは必須です。 接続型と非接続型は、ADO.NET の基本ですので、次は非接続型について学ばれると良いと思います。 _________________ C#と諸々 | ||||
|
投稿日時: 2009-02-02 11:38
あー、コードしっかり読んでみたら、<他の人のコーディング> は何か変わったことやってますね。
テーブルアダプタを、単にコネクションオブジェクトの取得の為にしか使ってないようです。 なぜそういうやり方をしているのかはわかりませんが、 そのコードは決してテーブルアダプタの "一般的な" 使い方ではありませんので注意してください。 _________________ C#と諸々 | ||||
|
投稿日時: 2009-02-02 13:29
なるほど。なぜ違うのか理解できました。 そこで、非接続型について調べて下記のように記述しました。 しかし、getConnectionStringのところでエラーになります。 エラー:名前'getConnectionString'は宣言されていません。 これはどうしたらいいのですか?初歩的なことで申し訳ありませんがよろしくお願いします。 ' 非接続データアクセスでの複数件の検索 Dim sqlDA As SqlDataAdapter Dim ds As DataSet Dim i As Integer ' DataAdapter オブジェクトの生成 sqlDA = New SqlDataAdapter() ' DataSet オブジェクトの生成 ds = New DataSet() ' DataAdapter にSelectCommand を追加 sqlDA.SelectCommand = New SqlCommand() ' SelectCommand の各種プロパティを設定 strsql = "SELECT CD, NAME FROM xxx WHERE (CD = '001')" sqlDA.SelectCommand.CommandType = CommandType.Text sqlDA.SelectCommand.CommandText = strsql sqlDA.SelectCommand.Connection = New SqlConnection(getConnectionString) ' 検索結果をDataSet へ格納 sqlDA.Fill(ds, "SHICHOSON") ' DataSet 内のテーブル"SHICHOSON"の各レコードに対して処理を実行 If ds.Tables("SHICHOSON").Rows.Count > 0 Then .txtNAME.Text = ds.Tables("SHICHOSON").Rows(i).Item("NAME").ToString() End If | ||||
|
投稿日時: 2009-02-02 13:38
getConnectionString という ConnectionString を返すメソッドを
宣言すれば良いのでは無いでしょうか。 | ||||
|
投稿日時: 2009-02-02 13:44
んー、"getConnectionString" という名前はどこから出てきましたか?
1. どこかにそういう名前のフィールドがあるから 2. どこかにそういう名前のメソッドがあるから 3. 参考にしたコードにそう書いてあったから 4. こういう名前にすればどこからともなく接続文字列が手に入ると思ったから _________________ C#と諸々 | ||||
|
投稿日時: 2009-02-02 13:53
すみません。「参考にしたコードにそう書いてあったから」です。 "getConnectionString"が データベースへの接続文字列を引数にしているみたいですが、接続文字列の取得は、下記のように直接記述する以外に方法はありますか? Public Con As System.Data.SqlClient.SqlConnection Con = New System.Data.SqlClient.SqlConnection() Con.ConnectionString = "Data Source=192.168.xx.xxx;Initial Catalog=TestDB;User ID=sa;Password=sa Con.Open() | ||||
|
投稿日時: 2009-02-02 14:26
> 接続文字列の取得は、下記のように直接記述する以外に方法はありますか?
設定ファイルに持たせたいのならば、My.Settings が利用できます。 ただ、参考にしたコードが同一アプリのものならば、それを使用した方がよいかもしれません。 もしくは、最初に提示された <他の人のコーディング> が同一アプリのものならば、 これと同じようにした方がよいかもしれません。 その場合は、チームのメンバーに確認してください。 _________________ C#と諸々 |