2014-12-27 3 views
-3

Я не могу видеть, где я ошибаюсь в коде, я попытался изменить его несколько раз и не смог получить изменения, я был бы очень признателен, если бы мог получить какую-то помощь.Ошибка синтаксиса в моей инструкции UPDATE

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)'? –

+1

Это помогает, если вы объясните, что он должен делать, и какие сообщения об ошибках вы получаете, если они есть. –

+3

Ничего себе, это действительно как не делать SQL в C#. Он подвержен инъекциям SQL. Он склонен к тому, что кто-то просто не выбирает пол. Это ужасно. У вас есть имена полей «Высота (см)»? Вау. В самом деле. Вау. – nvoigt

ответ

-2

Использование [Height(cm)] вместо Height(cm).

+7

Мы не знаем, действительно ли это проблема, пока OP не предоставит более подробную информацию. –

+0

Этот ответ нуждается в дополнительной информации .. – cybermonkey

4

Давайте начнем с некоторыми основами:

  • Не используйте имена столбцов, как это, а также таблицы имена. Это плохая практика.

  • Использование SqlParameter для вашего SqlCommand, чтобы предотвратить SQL-инъекции

  • Используйте различные классы для BusinesLayer, DataAccessLayer

Вот как этот вид в коде на странице 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 минут назад, и он сработал, я хотел бы сказать большое спасибо за то, что помогал и говорил со мной в добрых манерах и давал мне конструктивную критику чем относиться ко мне как к foo, спасибо :) – waffleman997

+0

@ waffleman997 Не беспокойтесь, все начинаются откуда-то :) Удачи вам в программировании, надеюсь, вам понравится :) – mybirthname

+1

Вы должны проверить [Можем ли мы остановить использование AddWithValue() уже?] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/) и прекратите использование '.AddWithValue()' - это может привести к неожиданным и удивительные результаты ... –

Смежные вопросы