質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

9428閲覧

C# データセットのデータをテキストボックスに表示したい

AbcdefgFirst

総合スコア33

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2018/01/24 09:44

プログラム初心者です。
分からないことが多く、見苦しい点が多々あると思いますが、質問させて下さい。

目的

商品コードのテキストボックスに商品コードを入力後、検索ボタンをクリックし、データセットに一致したコードがあれば商品名、価格を各項目のテキストボックスに表示したい。

状況

Visual StudioのWindowsフォームアプリケーションから商品コード、商品名、価格のテキストボックスを画面に配置し、SQL Adapterを用いて、SQL Serverに作ったサンプルデータ(レコード数:3)をDataSetに持ってきた。

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Configuration; 5using System.Data; 6using System.Data.SqlClient; 7using System.Drawing; 8using System.Linq; 9using System.Text; 10using System.Threading.Tasks; 11using System.Windows.Forms; 12 13namespace WindowsFormsApp1 14{ 15 public partial class SqlCall : Form 16 { 17 public SqlCall() 18 { 19 InitializeComponent(); 20 SqlConnection connection = new SqlConnection("data source =<サーバ名>\SQLEXPRESS;initial catalog = <データベース名>; Integrated Security = True;Connection Timeout = 10;MultipleActiveResultSets = True"); 21 connection.Open(); 22 23 SqlCommand command = new SqlCommand(); 24 command.Connection = connection; 25 command.CommandText = "SELECT 商品コード,商品名,価格,単位 FROM <テーブル名>"; 26 27 DataSet ds = new DataSet(); 28 29 SqlDataAdapter adapter = new SqlDataAdapter(); 30 adapter.SelectCommand = command; 31 32 adapter.Fill(ds); 33 34 // データセットのレコード件数 35 MessageBox.Show(ds.Tables[0].Rows.Count.ToString()+"レコード取得しました。"); 36 37 connection.Close(); 38 } 39 40 private void dbSearch_Click(object sender, EventArgs e) 41 { 42 // 分からない部分 43 } 44 45 } 46}

上記のソースで「データセットのレコード件数」とコメントしてあるメッセージボックスでは、"3レコード取得しました。"と表示されるので、SQL Serverからデータセットにデータを持ってくる処理はできていると思います。

その次のイベントハンドラ内に書く処理がよく分かりません。
DataSetのインスタンスであるdsの中に、テーブルやカラムを作り、それを使ってレコードを特定する処理を書けば良いかと思ったのですが、イベントハンドラ内でdsと入力しても、上で作ったものとは別のDataSetになってしまいます。

同じクラス内だからdsはイベントハンドラ内でも使えるかと思ったのですが、使えないのでしょうか?

また、connection.closeでデータベースとの接続を閉じても、DataSetにはデータは残っているのでしょうか?

よく分からないので、お力を貸して頂きたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

変数のスコープなどごく基本的な知識が不足していると思われます。

C# 変数 スコープ などをキーワードにググってみて、ヒットする記事を読むことをお勧めします。

その知識なしで話が通じるかどうかわかりませんが、一応疑問点に回答すると・・・

同じクラス内だからdsはイベントハンドラ内でも使えるかと思ったのですが、使えないのでしょうか?

ds は SqlCall メソッド(コンストラクタもメソッド)内で定義されているのでその中でしか使えません。SqlCall クラス内全体で使えるようにするには、ds の定義を SqlCall メソッドの外に出す、例えば以下のようにしてみてください。

namespace WindowsFormsApp1 { public partial class SqlCall : Form { DataSet ds; public SqlCall() { // ・・・略・・・ ds = new DataSet(); // ・・・略・・・

また、connection.closeでデータベースとの接続を閉じても、DataSetにはデータは残っているのでしょうか?

上記のようにすれば、少なくとも SqlCall クラス内では残ってますです。

投稿2018/01/25 04:05

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbcdefgFirst

2018/01/26 07:16

ご回答ありがとうございます。 仰るとおり、勉強不足で基本的な知識がまだまだ不足しています。 質問については、メソッドの外にコードを移すことで、参照できるようになりました! C#についてまた1から勉強し直したいと思います。
guest

0

ds はローカル変数なのでメソッド外ではつかえません。
デザイナーを開いてツールボックスからフォームにドロップしてください。

投稿2018/01/24 09:50

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbcdefgFirst

2018/01/26 07:13

先日に引き続き、ご回答ありがとうございました。 デザインの方面から、アクセスできるデータセットを作る方法もあったのですね! コードの方ばかり見ており、デザインは意識していませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問