Visual Sutaudio2017を使ってADO.NETによるデータベース(SQLServer)プログラミングでWindowsFormを作っています。
CREATE TABLE [dbo].[IMAGE] ( [ImageID] INT IDENTITY (1, 1) NOT NULL, [Photoname] NVARCHAR (50) NULL, [GenreID] INT NULL, CONSTRAINT [NUM2] PRIMARY KEY CLUSTERED ([ImageID] ASC), CONSTRAINT [NUM3] FOREIGN KEY ([Genre]) REFERENCES [dbo].[GENRE] ([GenreID]) ); CREATE TABLE [dbo].[GENRE] ( [GenreID] INT IDENTITY (1, 1) NOT NULL, [Genre] NVARCHAR (50) NULL, CONSTRAINT [NUM1] PRIMARY KEY CLUSTERED ([GenreID] ASC) );
というテーブルを作り
[dbo].[IMAGE]
ImageID | Photoname | Genre |
---|---|---|
1 | A.PNG | 1 |
2 | B.PNG | 2 |
[dbo].[GENRE]
GenreID | Genre |
---|---|
1 | 野球 |
2 | サッカー |
と格納しました。
新たにデータを格納したくて
private void button2_Click(object sender, EventArgs e) { cn.ConnectionString= @"・・・"; cn.Open(); cmd.Connection = cn; cmd.CommandType = CommandType.Text; cmd.CommandText = "INSERT INTO [dbo].[GENRE] (Genre) VALUES (" + "N'" + textBox1.Text + "')" + //GenreをDBに格納 "INSERT INTO [dbo].[IMAGE](Photoname,GenreID) VALUES" + "( N'" + textBox2.Text + "'," + "(SELECT GenreID FROM[dbo].[GENRE] " + "WHERE Genre Like N'%" + textBox1.Text + "%'))"; rd = cmd.ExecuteReader(); rd.Close(); cn.Close(); textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; } //textBox1にはGenreをtextBox2にはPhotonemeを入力します。
で格納し
private void button4_Click(object sender, EventArgs e) { cn.ConnectionString = cnstr; cn.Open(); cmd.Connection = cn; cmd.CommandType = CommandType.Text; cmd.CommandText = "SELECT * FROM [dbo].[IMAGE] "; rd = cmd.ExecuteReader(); while (rd.Read()) listBox1.Items.Add( String.Format("[ImageID]{0}[Photoname]{1}[GenreID]{2}", rd["ImageID"], rd["Photoname"], rd["GenreID"])); rd.Close(); cn.Close(); } private void button5_Click(object sender, EventArgs e) { cn.ConnectionString = cnstr; cn.Open(); cmd.Connection = cn; cmd.CommandType = CommandType.Text; cmd.CommandText = "SELECT * FROM [dbo].[Genre] "; rd = cmd.ExecuteReader(); while (rd.Read()) listBox1.Items.Add( String.Format("[GenreID]{0}[Genre]{1}", rd["GenreID"], rd["Genre"])); rd.Close(); cn.Close(); }
でテーブルの中身を確認しました。
textBox1に卓球textBox2にC.PNGを入力しボタンを押すと格納できます。
しかしtextBox1に野球textBox2にC.PNGを入力し格納すると
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. The statement has been terminated.
が表示されて格納できません。
なのでGenreが重複していても格納できる方法を教えてください。
ちなみに
"INSERT INTO [dbo].[IMAGE](Photoname,GenreID) VALUES" + "( N'" + textBox2.Text + "'," + "(SELECT GenreID FROM[dbo].[GENRE] " + "WHERE Genre Like N'%" + textBox1.Text + "%'))";
でtextBox1に卓球textBox2にC.PNGを入力しボタンを押して格納することとtextBox1に野球textBox2にC.PNGを入力しを入力しボタンを押して格納することはできました。
制作物
Windows Form
検索
どこが間違っているかわからないので検索していません。
開発環境
Visual Sutaudio2017,.NET Framework4.7,SQL Server Express2017,Windows10
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/19 09:02
2019/11/19 10:12
2019/11/19 10:24
2019/11/19 10:42
2019/11/19 11:09
2019/11/19 11:14
2019/11/20 00:02