Visual Sutaudio2017を使ってADO.NETによるデータベース(SQLServer)プログラミングでWindowsFormを作っています。
CREATE TABLE [dbo].[IMAGE] ( [ImageID] INT IDENTITY (1, 1) NOT NULL, [Photoname] NVARCHAR (50) NULL, [Genre] 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) );
というテーブルを作りました。
IMAGEテーブルのPhotonameとGENREテーブルのGrnreにINSERTした後GenreにGENREテーブルのGenreIDをSELECTで取得したのをINSERTしたく
private void button2_Click(object sender, EventArgs e) { cn.ConnectionString= @"・・・"; cn.Open(); cmd.Connection = cn; cmd.CommandType = CommandType.Text; cmd.CommandText = "INSERT INTO [dbo].[IMAGE] (Photoname) VALUES("+ "N'" + textBox3.Text + "')" + //PhotonameをIMAGEテーブルに格納 "INSERT INTO [dbo].[GENRE] (Genre) VALUES (" + "N'" + textBox1.Text + "')" +//GenreをGENREテーブルに格納 ("INSERT INTO[dbo].[IMAGE](Genre)" + "SELECT GenreID FROM[dbo].[GENRE] " + "WHERE Genre Like N'% "+ textBox1.Text + "%'"); //GenreIDをIMAGEテーブルに格納 rd = cmd.ExecuteReader(); rd.Close(); cn.Close(); }
とし
private SqlConnection cn = new SqlConnection(); private SqlCommand cmd = new SqlCommand(); private SqlDataReader rd; private string cnstr = @"・・・"; 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,-10}[Genre]{2,-10}", rd["ImageID"],rd["Photoname"], rd["Genre"])); rd.Close(); cn.Close(); }
で表示させました。
IMAGEテーブルのPhotonameにデータは格納できましたがGenreにデータが格納できません。
エラーコードが表示されないのでどこが間違っているかわからないので教えてください。
制作物
Windows Form
検索
どこが間違っているのか分からなかったので検索はしていません。
開発環境
Visual Sutaudio2017,.NET Framework4.7,SQL Server Express2017,Windows10
テーブル設計で同じ列名でデータ型や桁数が違う作りは止めた方が良いです。自分の首を締めます。
GENREテーブルのGenreのデータ型を変えたらinsert出来ますか?
実行しようとしているSQLをSQL Management Studioなど作成しているプログラムと別の方法で実行して確かめないんですか?
「テーブル設計で同じ列名でデータ型や桁数が違う作りは止めた方が良いです。」
とありますがどこをとめたほうがよいかわからないので教えてほしいです。
IMAGEテーブルのGenreはint、GENREテーブルのGenreはNVARCHARと同じ名前なのに明らかに入れるデータが異なる設計です。
このような状態だと勘違いしてバグの原因になりますので、識別できるように別の名前にしましょうということです。
提示されているテーブルは2つしかないないに気が付かないのは残念です。
列名、データ型、列名、テーブル名 の順でSELECTしてみては?
SQL Server データディクショナリ情報を取得する方法 http://note.mokuzine.net/sqlserver-dictionary/
コメントが間違っていたので
//GenreをIMAGEテーブルに格納を
//GenreIDをIMAGEテーブルに格納に修正しました。
コメントのことはとりあえず置いておくとして、SELECT文を実行する方法がわからないの?
Select文を使ったInsert文がわからないです。
https://www.projectgroup.info/tips/SQLServer/SQL/SQL000004.html を参考に
("INSERT INTO[dbo].[IMAGE](Genre)" +
"SELECT GenreID FROM[dbo].[GENRE] " +
"WHERE Genre = N'% "+ textBox1.Text + "%'")を
("INSERT INTO[dbo].[IMAGE](Genre)" +
"SELECT GenreID FROM[dbo].[GENRE] " +
"WHERE [dbo].[GENRE].Genre Like N'% "+ textBox1.Text + "%'")
に変えて実行しましたがINSERTされていなくて表示されません。
エラー文は表示されずどこが間違っているかわからないので教えてください。
>cmd.CommandText = "INSERT INTO ...
cmd.CommandTextの内容を質問に追加しては?
デバッガを使えれば。コードを修正しなくても簡単に内容を確認できます。
回答2件
あなたの回答
tips
プレビュー