1

レコードを更新しようとしていますが、例外がスローされています。このコードにエラーはありますか?

try
{
   using (SqlConnection conn = new SqlConnection(Common.GetDBConnectionString()))
   {
      conn.Open();
      using (SqlCommand cmd =
                        new SqlCommand("UPDATE dbo.Tb_Patient SET Name = @PatientName, Age = @PatientAge, Contact = @PatientContact, Date = @PatientDate, Occupation = @PatientOccupation, Gender = @PatientGender " +
                            " WHERE Id=@SetVForText", conn))
      {
         cmd.Parameters.AddWithValue("@Id", SetVForText);
         cmd.Parameters.AddWithValue("@Name", txtname.Text);
         cmd.Parameters.AddWithValue("@Age", txtage.Text);
         cmd.Parameters.AddWithValue("@Contact", txtcontact.Text);
         cmd.Parameters.AddWithValue("@Date", txtdate.Text);
         cmd.Parameters.AddWithValue("@Occupation", txtoccupation.Text);
         cmd.Parameters.AddWithValue("@Gender",comboBox1.SelectedItem.ToString() );

         int rows = cmd.ExecuteNonQuery();
         MessageBox.Show("Update successfully");

         //rows number of record got updated
      }
   }
}
catch (SqlException ex)
{
   MessageBox.Show("Updation failed"+ex);
}
4

4 に答える 4

0

これを試してみてください。データベースでは、日時列に null 値を許可し、テキスト ボックスから日付を「mm/dd/yyyy」形式で送信します




    try
            {
                using (SqlConnection conn = new SqlConnection(Common.GetDBConnectionString()))
                {
                    conn.Open();
                    DateTime? Date;
                    DateTime.TryParseExact(txtdate.Text, "MM/dd/yyyy",
                               System.Globalization.CultureInfo.InvariantCulture,
                               System.Globalization.DateTimeStyles.None,
                               out Date);

                    if (Date == Convert.ToDateTime("1/1/0001 12:00:00 AM"))
                        Date = null;

                    using (SqlCommand cmd =
                                      new SqlCommand("UPDATE dbo.Tb_Patient SET Name = @Name, Age = @Age, Contact = @Contact, Date = @Date, Occupation = @Occupation, Gender = @Gender " +
                                          " WHERE Id=@SetVForText", conn))
                    {


                        cmd.Parameters.AddWithValue("@Id", SetVForText);
                        cmd.Parameters.AddWithValue("@Name", txtname.Text);
                        cmd.Parameters.AddWithValue("@Age", txtage.Text);
                        cmd.Parameters.AddWithValue("@Contact", txtcontact.Text);
                        cmd.Parameters.AddWithValue("@Date", Date);
                        cmd.Parameters.AddWithValue("@Occupation", txtoccupation.Text);
                        cmd.Parameters.AddWithValue("@Gender", comboBox1.SelectedItem.ToString());

                        int rows = cmd.ExecuteNonQuery();
                        MessageBox.Show("Update successfully");

                        //rows number of record got updated
                    }
                }
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Updation failed" + ex);
            }

于 2013-03-25T13:53:45.307 に答える
0

txtdate.Text有効なに変換するようにしてDateTimeください。これは、更新エラーの最も可能性の高い原因です。また、列名 ではなく、のパラメータ名を使用する必要があります。AddWithValue

ある程度の変換は行われますが、通常は、コマンド パラメータで正しいデータ型を渡すようにする必要があります。

于 2013-03-25T12:39:05.063 に答える
0

パラメータには同じ名前を付ける必要があります。

cmd.Parameters.AddWithValue("@PatientName", txtname.Text);

それ以外の

cmd.Parameters.AddWithValue("@name", txtname.Text);

于 2013-03-25T12:39:10.543 に答える
0

これらはすべて間違っています。

cmd.Parameters.AddWithValue("@Id", SetVForText);
cmd.Parameters.AddWithValue("@Name", txtname.Text);
cmd.Parameters.AddWithValue("@Age", txtage.Text);
cmd.Parameters.AddWithValue("@Contact", txtcontact.Text);
cmd.Parameters.AddWithValue("@Date", txtdate.Text);
cmd.Parameters.AddWithValue("@Occupation", txtoccupation.Text);
cmd.Parameters.AddWithValue("@Gender",comboBox1.SelectedItem.ToString() );

パラメータの名前のように、フィールドの名前を使用しています。パラメータの名前が異なります

@PatientName,@PatientAge,@PatientContact,@PatientDate,
@PatientOccupation,@PatientGender @SetVForText

したがって、 AddWithValue 呼び出しは

cmd.Parameters.AddWithValue("@SetVForText", SetVForText);
cmd.Parameters.AddWithValue("@PatientName", txtname.Text);
cmd.Parameters.AddWithValue("@PatientAge", txtage.Text);
cmd.Parameters.AddWithValue("@PatientContact", txtcontact.Text);
cmd.Parameters.AddWithValue("@PatientDate", txtdate.Text);
cmd.Parameters.AddWithValue("@PatientOccupation", txtoccupation.Text);
cmd.Parameters.AddWithValue("@PatientGender",comboBox1.SelectedItem.ToString() );

さらに、あなたの質問から、パラメーターの正しいデータ型を特定することはできません。書かれているように、データテーブルのすべてのフィールドは varchar/nvarchar データ型である必要があります。SetVForText

于 2013-03-25T12:39:22.350 に答える