WindowsFormで画面を作成しています。
①生徒一覧画面 ②登録画面 ③編集画面 の3画面を作成しています。
C#でSQLServerに接続し、データを操作できる画面です。
ここではSQL文を扱うプロジェクト(SQL)と画面の操作をするプロジェクト(Operation)でわけたいと思っています。
id:生徒番号
name1:名字
name2:名前
birthday:誕生日
post_code:郵便番号
adress:住所
Operationで情報の更新の操作を行っています。
C#
1//Operation 2 3 //OKボタン押下時 4 if (result == DialogResult.OK) 5 { 6 //MemberInformation member = new MemberInformation(); 7 //MemberInformationManager.Update(member); 8 //member.FirstName = textSei.Text; 9 //member.LastName = textMei.Text; 10 //DateTime birthday; 11 //member.Birthday = DateTime.TryParse(year + "/" + month + "/" + day, out birthday) ? year + month + day : null; 12 //member.IsMan = manBt.Checked; 13 //member.IsWoman = womanBt.Checked; 14 //member.PostCode = yuubin1 == "" && yuubin2 == "" ? null : yuubin1 + yuubin2; 15 //member.Adress = textJyusyo.Text; 16 17 // 接続文字列の取得 18 var connectionString = ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString; 19 20 // データベース接続の準備 21 using (var connection = new SqlConnection(connectionString)) 22 using (var command = connection.CreateCommand()) 23 { 24 try 25 { 26 // データベースの接続開始 27 connection.Open(); 28 29 // SQLの準備 30 command.CommandText = @" UPDATE MEMBER_MASTER SET name1 = @name1, name2 = @name2, birthday = @birthday, gender = @gender, post_code = @post_code, " 31 + "adress = @adress, last_updated = @last_updated, version = version+1 WHERE id = @id"; 32 command.Parameters.Add(new SqlParameter("@id", dgv.Cells[0].Value.ToString())); 33 command.Parameters.Add(new SqlParameter("@name1", sei)); //姓の登録 34 command.Parameters.Add(new SqlParameter("@name2", mei)); //名の登録 35 DateTime birthday; 36 command.Parameters.Add(new SqlParameter("@birthday", 37 DateTime.TryParse(year + "/" + month + "/" + day, out birthday) ? birthday : (object)DBNull.Value)); //生年月日の登録 38 command.Parameters.Add(new SqlParameter("@gender", seibetu)); //性別の登録 39 command.Parameters.Add(new SqlParameter("@post_code", 40 yuubin1 == "" && yuubin2 == "" ? (object)DBNull.Value : yuubin1 + yuubin2)); //郵便番号の登録 41 command.Parameters.Add(new SqlParameter("@adress", jyusyo == "" ? (object)DBNull.Value : jyusyo)); //住所の登録 42 command.Parameters.Add(new SqlParameter("@last_updated", DateTime.Now)); //更新日の登録 43 44 // SQLの実行 45 command.ExecuteNonQuery(); 46 } 47 catch (Exception exception) 48 { 49 Console.WriteLine(exception.Message); 50 throw; 51 } 52 finally 53 { 54 // データベースの接続終了 55 connection.Close(); 56 } 57
データの更新部を上記のように書いていました。
それを
C#
1 2 //OKボタン押下時 3 if (result == DialogResult.OK) 4 { 5 //MemberInformation member = new MemberInformation(); 6 //MemberInformationManager.Update(member); 7 //member.FirstName = textSei.Text; 8 //member.LastName = textMei.Text; 9 //DateTime birthday; 10 //member.Birthday = DateTime.TryParse(year + "/" + month + "/" + day, out birthday) ? year + month + day : null; 11 //member.IsMan = manBt.Checked; 12 //member.IsWoman = womanBt.Checked; 13 //member.PostCode = yuubin1 == "" && yuubin2 == "" ? null : yuubin1 + yuubin2; 14 //member.Adress = textJyusyo.Text; 15 } 16 17
で書いてみたのですが、
”追加情報:パラメーター化クエリ '(@id int,@name1 nvarchar(4000),@name2 nvarchar(4000),@birthday n' に必要なパラメーター '@name1' が指定されていません。”
とエラーが出てしまいます。
ちなみにSQL文のプロジェクトとクラスは下記です。
C#
1//SQL 2 3 public static Boolean Update(MemberInformation member) 4 { 5 // 接続文字列の取得 6 var connectionString = ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString; 7 8 // データベース接続の準備 9 using (var connection = new SqlConnection(connectionString)) 10 using (var command = connection.CreateCommand()) 11 { 12 try 13 { 14 // データベースの接続開始 15 connection.Open(); 16 17 // SQLの準備 18 command.CommandText = @" UPDATE MASTER SET name1 = @name1, name2 = @name2, birthday = @birthday, gender = @gender, post_code = @post_code, " 19 + "adress = @adress, last_updated = @last_updated, version = version+1 WHERE id = @id"; 20 command.Parameters.Add(new SqlParameter("@id", member.Id)); 21 command.Parameters.Add(new SqlParameter("@name1", member.FirstName)); //姓の登録 22 command.Parameters.Add(new SqlParameter("@name2", member.LastName)); //名の登録 23 DateTime birthday; 24 command.Parameters.Add(new SqlParameter("@birthday", 25 DateTime.TryParse(member.Birthday, out birthday) ? member.Birthday : (object)DBNull.Value)); //生年月日の登録 26 string seibetu = member.IsMan ? "1" : "2"; 27 command.Parameters.Add(new SqlParameter("@gender", seibetu)); //性別の登録 28 command.Parameters.Add(new SqlParameter("@post_code", member.PostCode == "" ? (object)DBNull.Value : member.PostCode)); //郵便番号の登録 29 command.Parameters.Add(new SqlParameter("@adress", member.Adress == "" ? (object)DBNull.Value : member.Adress)); //住所の登録 30 // SQLの実行 31 command.ExecuteNonQuery(); 32 } 33 catch (Exception exception) 34 { 35 Console.WriteLine(exception.Message); 36 throw; 37 } 38 finally 39 { 40 } 41 return true; 42 } 43 } 44
C#
1public class MemberInformation 2 { 3 public int Id { get; set; } 4 public string Name { get; set; } 5 public String FirstName { get; set; } 6 public String LastName { get; set; } 7 public String Birthday { get; set; } 8 public Boolean IsMan { get; set; } 9 public Boolean IsWoman { get; set; } 10 public String PostCode { get; set; } 11 public String Adress { get; set; } 12 }
回答2件
あなたの回答
tips
プレビュー