Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C时发生更新记录异常#_C#_Sql_Sql Server - Fatal编程技术网

C# 使用C时发生更新记录异常#

C# 使用C时发生更新记录异常#,c#,sql,sql-server,C#,Sql,Sql Server,我正在尝试更新记录,并引发异常。这个代码有错误吗 try { using (SqlConnection conn = new SqlConnection(Common.GetDBConnectionString())) { conn.Open(); using (SqlCommand cmd = new SqlCommand("UPDATE dbo.Tb_Patient SET Name = @PatientNa

我正在尝试更新记录,并引发异常。这个代码有错误吗

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);
}

我要说的是,确保将
txtdate.Text
转换为有效的
DateTime
。这是最有可能导致更新错误的原因。此外,您需要使用
AddWithValue
中的参数名,而不是列名


即使在某种程度上进行了转换,通常也应确保在命令参数中传递正确的数据类型。

参数的名称必须相同:

cmd.Parameters.AddWithValue(“@PatientName”,txtname.Text)

而不是

cmd.Parameters.AddWithValue(“@name”,txtname.Text)

这些都是错误的

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,可能会出现异常情况
setvfortex

尝试此操作可能会对您有所帮助。在数据库中,允许日期时间列为空值,并以“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);
            }


错误/异常是什么?您正在添加大多数参数。例如PatientName PatientContact等。您是否打开了与数据库的连接。。??这可能是原因之一。尝试更改“日期”字段,它总是会引起一些混乱,并因此导致一些不可避免的例外情况。希望有帮助在一个很大的盒子里有一个很大的例外(Jeeez…在
catch
块中设置一个断点并告诉我们异常消息!将鼠标指向
ex
并告诉我们错误消息。或者,将
+ex
更改为
+ex.message
并再次运行。除date(TimeDate)和setvfortex(int)外,所有参数都具有字符串数据类型.System.Data.SqlClient.SqlConnection.OnError、System.Data.SqlClient.TdsParser.throweexception和warning、System.Data.SqlClient.TdsParser.Run等……:(您的连接有问题,请检查您的连接字符串。数据源=SIDRA-PC;初始目录=数据库;集成安全性=True;@是我的连接字符串,此字符串在插入数据时起作用。如果您的连接正确,则日期转换可能引发异常。只需尝试此代码与“Syste”的最佳重载方法匹配m、 DateTime.TryParseExact(string,string,System.IFormatProvider,System.Globalization.DateTimeStyles,out System.DateTime)有一些无效参数您是否将文本值作为mm/dd/yyyyyPost发送日期文本框值32/52/13此z 2013年3月25日