2014-12-27 177 views
-3

我不能看到我的代码出错了,我尝试了几次改变它,并无法获得更改,如果我可以得到一些帮助,我将不胜感激。我的更新语句中的语法错误

private void btnUpdatePersonalDetails_Click(object sender, EventArgs e) 
    { 
     if (rndMale.Checked == true) 
     { 
      Gender = "Male"; 
     } 
     else 
     { 
      if (rndFemale.Checked == true) 
      { 
       Gender = "Female"; 
      } 
     } 
     string mySqlCode = 
      "UPDATE tblPersonalDetails Set [First Name]='" + txtFirstName.Text 
      + "',[Last Name] = '" + txtLastName.Text 
      + "',Age = '" + txtAge.Text 
      + "',Height(cm) = '" + txtHeight.Text 
      + "',[Average Resting Heart Rate] = '" + txtAverageRestingHeartRate.Text 
      + "',[Contact Number] = '" + txtContactNumber.Text 
      + "',newAddress = '" + txtAddress.Text 
      + "',Gender = '" + Gender 
      + "' WHERE Username= '"+GlobalUsername.username+"'"; 
     insertDatabase(mySqlCode); 

    } 
+3

你真的有一个名为'Height(cm)'的列吗? – 2014-12-27 13:27:28

+1

如果你解释它应该做什么,以及收到什么错误消息(如果有),它会有所帮助。 – 2014-12-27 13:27:35

+3

哇,这真的是如何不在C#中执行SQL。它很容易SQL注入。很容易有人不会选择性别。这太糟糕了。你有一个字段名称“高(厘米)”?哇。真。哇。 – nvoigt 2014-12-27 13:27:58

回答

-2

使用[Height(cm)]而不是Height(cm)

+7

我们不知道这是否是OP提供更多细节之前的实际问题。 – 2014-12-27 13:45:11

+0

这个答案需要更多的信息.​​. – cybermonkey 2015-02-01 13:17:46

4

让我们先从一些基础知识:

  • 不要使用列名这样也表名。这是不好的做法。

  • 使用SqlParameterSqlCommand防止SQL注入

  • 使用不同类BusinesLayerDataAccessLayer

这里是如何看的代码aspx页面:

private void btnUpdatePersonalDetails_Click(object sender, EventArgs e) 
{ 
     if (rndMale.Checked == true) 
     { 
      gender = "Male"; 
     } 
     else 
     { 
      if (rndFemale.Checked == true) 
      { 
       gender = "Female"; 
      } 
     } 

     PersonalDetails personDetails = new PersonalDetails(); 

     personalDetails.UpdateDetails(txtFirstName.Text, txtLastName.Text, txtAge.Text, txtHeight.Text,txtAverageRestingHeartRate.Text, txtContactNumber.Text, txtAddress.Text, gender, GlobalUserName.username); 
} 

这里是Business对象类 - >这里我会使用重命名的列。您应该在数据库中重命名您的列。

public void UpdateDetails(string firstName, string lastName, string age, string height, string avgHeartRate, string contactNumber, string address, string gender, string userName) 
{ 
    SqlCommand cmd = new SqlCommand(@" 
UPDATE 
    PersonalDetails 
SET 
    FirstName = @FirstName, 
    LastName = @LastName, 
    Age = @Age, 
    Height = @Height, 
    AvgHeartRate = @AvgHeartRate, 
    ContactNumber = @ContactNumber 
    Address = @Address, 
    Gender = @Gender 
WHERE 
    UserName = @UserName 
"); 

    cmd.Parameters.AddWithValue("@FirstName", firstName); 
    cmd.Parameters.AddWithValue("@LastName", lastName); 
    cmd.Parameters.AddWithValue("@Age", age); 
    cmd.Parameters.AddWithValue("@Height", height); 
    cmd.Parameters.AddWithValue("@AvgHeartRate", avgHeartRate); 
    cmd.Parameters.AddWithValue("@ContactNumber", contactNumber); 
    cmd.Parameters.AddWithValue("@Address", address); 
    cmd.Parameters.AddWithValue("@Gender", gender); 
    cmd.Parameters.AddWithValue("@UserName", userName); 

    SqlManager.ExecuteNonQuery(cmd); 
} 

这里是SqlManager类两种方法:

public static int ExecuteNonQuery(SqlCommand cmd) 
    { 
     SqlConnection conn = GetSqlConnection(cmd); 

     try 
     { 
      return cmd.ExecuteNonQuery(); 
     } 
     catch 
     { 
      throw; 
     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 

    public static SqlConnection GetSqlConnection(SqlCommand cmd) 
    { 
     if (cmd.Connection == null) 
     { 
      SqlConnection conn = new SqlConnection(ConnectionString); 

      conn.Open(); 

      cmd.Connection = conn; 

      return conn; 
     } 

     return cmd.Connection; 
    } 

如果你写列名正确,这将更新您的个人资料没有问题。我在这个问题中编写了基本的数据访问层:checking user name or user email already exists。你可以检查它,如果你想。

+0

大约5分钟前我改变它是这样的,它已经工作了,我想非常感谢你帮助我,并以友好的方式和我交谈,并给我建设性的批评比对待我像一个富,谢谢:) – waffleman997 2014-12-27 14:10:43

+0

@ waffleman997不用担心,每个人都从某处开始:)祝你好运与编程,希望你喜欢它:) – mybirthname 2014-12-27 14:12:46

+1

你应该看看[我们可以停止使用AddWithValue()了吗? (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/)并停止使用'.AddWithValue()' - 它可能会导致意外和令人惊讶的结果... – 2014-12-27 14:38:58