我正在尝试更新记录,并且正在抛出异常。这段代码有错误吗?
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);
}
答案 0 :(得分:0)
我要说明一定要将txtdate.Text
转换为有效的DateTime
。这是更新错误的最可能原因。此外,您需要使用AddWithValue
中的参数名称,而不是列名称!
即使在某种程度上发生转换,通常也应确保在命令参数中传递正确的数据类型。
答案 1 :(得分:0)
参数必须具有相同的名称:
cmd.Parameters.AddWithValue(“@ PatientName”,txtname.Text);
而不是
cmd.Parameters.AddWithValue(“@ name”,txtname.Text);
答案 2 :(得分: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数据类型,因为您正在将字符串传递给AddWithValue,可能的例外是SetVForText
答案 3 :(得分:0)
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);
}