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

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

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

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

2009閲覧

VB.NET,SQLServer でログインフォームを実装したいsyo

退会済みユーザー

退会済みユーザー

総合スコア0

SQL Server

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/05/26 02:40

編集2020/05/26 02:59

前提・実現したいこと

現在VB.NETでログインフォームを作っており、DBの接続やDBからの値取得はできているのですが、DBのデータをComboBoxへの格納の仕方がわかりません。

コンソールログでは値を出すことに成功しています。

発生している問題・エラーメッセージ

ComboBoxに値を格納する方法がわからない

該当のソースコード

現在のソースになります Private Sub LoginForm1_Load(sender As Object, e As EventArgs) Handles Me.Load Try 'SQLServerの接続開始 Dim sqlconn As New SqlConnection("") sqlconn.Open() Try 'SQL作成 Dim sql As New System.Text.StringBuilder sql.AppendLine("SELECT") sql.AppendLine(" *") sql.AppendLine("FROM ") 'SQL実行 Dim command As New SqlCommand(sql.ToString, sqlconn) Dim adapter As New SqlDataAdapter(command) Dim dt As New DataTable adapter.Fill(dt) '実行結果 For rowindex As Integer = 0 To dt.Rows.Count - 1 For colindex As Integer = 0 To dt.Columns.Count - 1 Console.Write(dt.Rows(rowindex).Item(colindex).ToString & " ") Next Console.WriteLine() Next Catch ex As Exception Throw Finally sqlconn.Close() End Try Catch ex As Exception MsgBox(ex.ToString) End Try End Sub End Class

試したこと

現在はDB接続確認のためにコンソールログに出すようにしています。

補足情報(FW/ツールのバージョンなど)

VB.NET/WindowsFrom/SQL Serverで作成しております。

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

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

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

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

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

guest

回答3

0

ログインとかの話はちょっと置いといて・・・

DBのデータをComboBoxへの格納の仕方がわかりません。

以下の記事のステップ 17 ~ の応用でできると思います。

DataGridView に ComboBox を表示
http://surferonwww.info/BlogEngine/post/2014/01/23/how-to-show-combobox-column-in-datagridview.aspx

上の記事は DataGridView の DataGridViewComboBoxColumn が対象ですが、普通の ComboBox でも同様にその DataSource プロパティを DataTable に、DisplayMember, ValueMember プロパティを DataTable の列名に設定することで可能だと思います。記事のコードを参考にしてください。

【追記】

下のコメント欄で、

「連結した結果」を ComboBox の DispalyMember に設定して表示するサンプルを回答欄に追記しておきます。

と書きましたが、それを以下に追記しておきます。

先にも書きましたが、以下の記事のステップ 17 ~ の応用です。

DataGridView に ComboBox を表示
http://surferonwww.info/BlogEngine/post/2014/01/23/how-to-show-combobox-column-in-datagridview.aspx

上の記事で使っている Northwind サンプルデータベースの Suppliers テーブルは以下のようになっています。

イメージ説明

この SupplierID, CompanyName, ContactName フィールドを空間文字をはさんで連結して Name という名前で取得し、SupplierID と Name で DataTable を生成し、ComboBox の DataSource に設定します。そして ValueMember を "SupplierID" に、DisplayMember を "Name" に設定すれば完了です。

コードは以下の通り。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClient; namespace WinFormsApp1 { public partial class Form5 : Form { public Form5() { InitializeComponent(); this.comboBox1.DataSource = CreateSuppliersTable(); this.comboBox1.ValueMember = "SupplierID"; this.comboBox1.DisplayMember = "Name"; } // Suppliers テーブルから DataTable を作るためのヘルパーメソッド private DataTable CreateSuppliersTable() { DataTable table = new DataTable("Suppliers"); table.Columns.Add(new DataColumn("SupplierID", typeof(int))); table.Columns.Add(new DataColumn("Name", typeof(string))); string connString = WinFormsApp1.Properties.Settings.Default.NORTHWNDConnectionString; string query = "SELECT [SupplierID], " + "CONVERT(nvarchar,[SupplierID]) + ' ' + [CompanyName] + ' ' + [ContactName] AS Name " + "FROM[NORTHWIND].[dbo].[Suppliers]"; using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(query, conn)) { using (SqlDataReader reader = cmd.ExecuteReader()) { if (reader != null) { while (reader.Read()) { DataRow row = table.NewRow(); row["SupplierID"] = reader.GetInt32(0); row["Name"] = reader.GetString(1); table.Rows.Add(row); } } } } } return table; } } }

実行結果は以下の通り。

イメージ説明

投稿2020/05/26 04:10

編集2020/05/27 02:16
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/05/26 07:12

ありがとうございます! 参考にさせていただきます。
退会済みユーザー

退会済みユーザー

2020/05/26 09:36 編集

tosi さんの回答のコメントを見ると複数のフィールドの文字列を連結して「001 山田太郎 01」というようにした結果を ComboBox に表示したいようですが、であれば SELECT クエリで連結するようにしてはいかがですか?
退会済みユーザー

退会済みユーザー

2020/05/26 08:21

無知で申し訳ないです。 SELECT クエリを使うとどのようなコードになりますでしょうか?
退会済みユーザー

退会済みユーザー

2020/05/26 09:35

フィールドの型が全部 nvarchar とかなら SELECT [コード] + [名前] + [所属] AS XXX ... FROM [テーブル] で XXX に連結した結果が取得できます。対象フィールドに int 型とかが混じっていれば CONVERT などを使って変換した後 + で結合してください。
退会済みユーザー

退会済みユーザー

2020/05/27 02:05

上のコメントで書いた「連結した結果」を ComboBox の DispalyMember に設定して表示するサンプルを回答欄に追記しておきます。
guest

0

ベストアンサー

Console.Write行を入れ替えれば良いだけと思われます。
(オブジェクト名称は適時変更)
Me.ComboBox1.Items.Add(dt.Rows(rowindex).Item(colindex).ToString)

投稿2020/05/26 03:37

編集2020/05/26 05:04
tosi

総合スコア553

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

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

退会済みユーザー

退会済みユーザー

2020/05/26 04:07 編集

回答ありがとうございます。 入れ替えたところデータは入ったのですが、コード・名前・役職コードが縦に並んでしまいます。 出来れば横一列に並べたいです。 現在: 001 山田太郎 01 実装したい:001 山田太郎 01 このようには出来るのでしょうか?
tosi

2020/05/26 04:17

dim work as String ="" work = work & dt.Rows(rowindex).Item(colindex).ToString work = work & dt.Rows(rowindex).Item(colindex).ToString work = work & dt.Rows(rowindex).Item(colindex).ToString Me.ComboBox1.Items.Add(work )
退会済みユーザー

退会済みユーザー

2020/05/26 04:30

試してみたところ 001001001 001 山田太郎山田太郎山田太郎 山田太郎 010101 01 となってしまいます。。
tosi

2020/05/26 04:41

申し訳けありません。 adapter.Fill(dt)の部分を見ていませんでした。 rowindexとcolindexの行列番号を適切に入れる様にすれば出来ます。 この先の部分は調整作業となります。 manta_様にて変更して頂きます様に宜しくお願い致します。
退会済みユーザー

退会済みユーザー

2020/05/26 05:14

度々申し訳ございません。 行列番号はどちらで変更すればよろしいのでしょうか?
tosi

2020/05/26 05:30

【解説します】 adapter.Fill(dt) (この部分でExcelシートの様な表が出来上がります。) For rowindex As Integer = 0 To dt.Rows.Count - 1 (この部分で1行づつ一を下にずらしています。行です。) For colindex As Integer = 0 To dt.Columns.Count - 1 (この部分で1列づつ右へ移動されています。列です。) 行:rowindex 列:colindex このロジック部分を変更し適切なrowindex/colindex番号を取得して、 取得した文字列を結合、ComboBox1へ書き込めば良いです。 表が出来上がった後に、それをどう使うかは運用に係る利用者の判断となります。
退会済みユーザー

退会済みユーザー

2020/05/26 06:29

丁寧にありがとうございます。 rowindex/colindexの番号は取得することができました。 取得した文字の結合がよくわかりません。 たびたびで申し訳ございません。
tosi

2020/05/26 08:05

dim work as String ="" work = work & dt.Rows(行番).Item(列番).ToString work = work & dt.Rows(行番).Item(列番).ToString work = work & dt.Rows(行番).Item(列番).ToString Me.ComboBox1.Items.Add(work ) または、&で文字列結合。
guest

0

こちらは参考になりませんか?

投稿2020/05/26 02:48

YAmaGNZ

総合スコア10242

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問