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

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

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

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

Visual Studio

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

ADO.NET

ADO.NETは.NET Frameworkで各種データベースへの統一された接続機能を提供するソフトウェアコンポーネントの集合です。

Q&A

解決済

1回答

2575閲覧

変数にselectの結果を代入し変数を使ってselectしたい

kswdfr

総合スコア21

SQL Server

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

Visual Studio

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

ADO.NET

ADO.NETは.NET Frameworkで各種データベースへの統一された接続機能を提供するソフトウェアコンポーネントの集合です。

0グッド

0クリップ

投稿2020/01/17 02:26

質問

Visual Sutaudio2017を使ってADO.NETによるデータベース(SQLServer)プログラミングでWindowsFormを作っています。

private void button18_Click(object sender, EventArgs e) { // ListViewの下準備 int width = 100; int height = 80; imageList1.ImageSize = new Size(width, height); listView1.LargeImageList = imageList1; imageList1.Images.Clear(); listView1.Items.Clear(); // 検索 var query = "select Photoname,Photo from[dbo].[IMAGE]" + "where ImageID in (select ImageID from[dbo].[IMAGEPAGE]" + "where BookID in (select BookID from[dbo].[BOOK]" + "where Title = @Title ))"; var command = new SqlCommand(query, conn); MessageBox.Show(comboBox4.Text + "で画像を検索しました。"); command.Parameters.Add(new SqlParameter("@Title", comboBox4.Text)); var dt = new DataTable(); var adapter = new SqlDataAdapter(command); adapter.Fill(dt); comboBox4.Text = ""; // PhotoをImageオブジェクトにしてサムネイル用にサイズ調整し、 // Titkeと一緒にListViewへ追加 foreach (var row in dt.AsEnumerable()) { var Photoname = row["Photoname"].ToString(); var ms = new MemoryStream((byte[])row["Photo"]); var original = Image.FromStream(ms); var thumbnail = createThumbnail(original, width, height); imageList1.Images.Add(thumbnail); listView1.Items.Add(Photoname, dt.Rows.IndexOf(row)); original.Dispose(); thumbnail.Dispose(); } Image createThumbnail(Image image, int w, int h) { Bitmap canvas = new Bitmap(w, h); Graphics g = Graphics.FromImage(canvas); g.FillRectangle(new SolidBrush(Color.White), 0, 0, w, h); float fw = (float)w / (float)image.Width; float fh = (float)h / (float)image.Height; float scale = Math.Min(fw, fh); fw = image.Width * scale; fh = image.Height * scale; g.DrawImage(image, (w - fw) / 2, (h - fh) / 2, fw, fh); g.Dispose(); return canvas; } comboBox4.Text = ""; }

で画像を出力しています。

var query = "select Photoname,Photo from[dbo].[IMAGE]" + "where ImageID in (select ImageID from[dbo].[IMAGEPAGE]" + "where BookID in (select BookID from[dbo].[BOOK]" + "where Title = @Title ))";

の部分を

ver query ="select Photoname,Photo from [dbo][IMAGE]" + "where ImageID in(select ImageID from [dbo].[IMAGEPAGE]" + "where PageID = '" + comboBox1.Text + " '" + "and BookID = A)";

にし変数Aに

"select BookID from[dbo].[BOOK]" + "where Title = @Title "

の結果を代入したいです。
しかしAにselectの結果を代入するやり方とどこにプログラムを書けばよいかわかりません。
なので教えてほしいです。

開発環境

Visual Sutaudio2017,.NET Framework4.7,SQL Server Express2017,Windows10

検索

ADO.NET 変数 select 結果 代入 、SQL Server 変数を使ってselectをするで検索しました。しかしよいサイトが見つかりませんでした。

制作物

windows form

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

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

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

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

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

guest

回答1

0

ベストアンサー

SQL部分を分かり易くすると、現状は以下です。

SQL

1select Photoname,Photo from[dbo].[IMAGE] 2where ImageID in ( 3 select ImageID from[dbo].[IMAGEPAGE] 4 where BookID in ( 5 select BookID from[dbo].[BOOK] where Title = @Title 6 ) 7 )

これに新たにパラメータを追加するなら、以下の様にします。

SQL

1select Photoname,Photo from[dbo].[IMAGE] 2where ImageID in ( 3 select ImageID from[dbo].[IMAGEPAGE] 4 where BookID in ( 5 select BookID from[dbo].[BOOK] where Title = @Title 6 ) 7 and PageID = @Page 8 ) 9

で、後はそのパラメータを追加

command.Parameters.Add(new SqlParameter("@Page", comboBox1.Text));

投稿2020/01/17 03:11

sazi

総合スコア25184

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

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

sazi

2020/01/17 03:14

SQLの結果を条件にするような場合は、一つのSQLに纏めないと性能的に酷いことになりかねません。
kswdfr

2020/01/17 04:19

ver query ="select Photoname,Photo from [dbo][IMAGE]" + "where ImageID in(select ImageID from [dbo].[IMAGEPAGE]" + "where PageID = '" + comboBox1.Text + " '" + "and BookID = A)"; と "select BookID from[dbo].[BOOK]" + "where Title = @Title " をいひとつのsqlにまとめる方法がわからないので教えてください。
sazi

2020/01/17 04:34

> ひとつのsqlにまとめる方法がわからないので教えてください。 回答の2番目がそれです
kswdfr

2020/01/18 13:21

教えてくれた通りのプログラムで実行したら思い通りに動きました。 教えてくれてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問