2015-03-11 2 views
0

Перед тем, как комментировать, пожалуйста, обратите внимание, что я понимаю, что мой код уязвим для SQL инъекций, пожалуйста игнорировать любые комментарии о нем в уязвима для целей простотыUpdate Query C# MySQL Forms

Я проверяемых вокруг веб-сайт для ответов, но ни один из них не соответствует моей ситуации, многие из них - PHP.

Я пытаюсь обновить информацию о базе данных MySQL из приложения C# Forms на Visual Studio 2012, поэтому я разрешил пользователю вводить данные, но я хочу, чтобы они могли обновлять свои данные.

Я пробовал всевозможные методы, многие из которых дают мне ошибки, я чувствую, что очень близко к этому методу.

string Connection = "server = xxxx; " + "database = xxxxx; " + "uid = xxxx;"+ "pwd = xxxxx;"; 
     MySqlConnection Conn = new MySqlConnection(Connection); 
     try 
     { 
      MySqlDataAdapter dAdapter = new MySqlDataAdapter("SELECT * FROM example", Conn); 

      DataTable dTable = new DataTable(); 
      dAdapter.Fill(dTable); 
      DataRow dr = dTable.NewRow(); 
      dr["TestData1"] = Convert.ToInt32(cboTestData1.Text); 
      dr["TestData2"] = txtTestData2.Text; 
      dr["TestData3"] = Convert.ToInt32(txtTestData3.Text); 
      dTable.Rows.Add(dr); 
      string Query = "Update example(field 1, field 2, field 3) VALUES ("TestData1", "TestData2", "TestData3")"; 
      dTable.Rows.Add(Query); 
      MySqlCommandBuilder commandBuilder = new MySqlCommandBuilder(dAdapter); 
      int iRowsAffected = dAdapter.Update(dTable); 
      if (iRowsAffected == 1) 
      { 
       MessageBox.Show("Record Added", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      } 
      else 
      { 
       MessageBox.Show("Error adding record", "Record Added", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      } 
     } 
     catch (MySqlException ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

Проблема в том, что ему не нравится код «Запрос» из-за его плохого. Это дает мне это сообщение об ошибке

Дополнительная информация: Входная строка не была в правильном магазине format.Couldn't в ID колонке. Ожидаемый тип Int32.

Я осмотрел интернет для решений, но все они либо не имеют такой же ситуации, как у меня, или связаны с кодом PHP.

ответ

1

Запрос обновления должен быть в синтаксисе ...

update SomeTable 
    set SomeField = NewValue, 
     AnotherField = AnotherValue 
    where 
     SomeKey = KeyIDTheUserWasWorkingWith 

Кроме того, для будущего, я знаю, что это выборочные данные маш-вверх/колонки, но вы действительно должны использовать реальные таблицы/имена столбцов , Образцы данных, как мы знаем, могут быть созданы для предотвращения конфиденциальности, но реальные структуры более практичны, чтобы получить ответы точными.

Оператор INSERT ближе к тому, что у вас есть и есть ...

insert into SomeTable 
    (fld1, fld2, fld3) 
    values 
    (someFld1, anotherFld2, lastField) 

Наконец, с именами столбцов, если вы DO (но я никогда не делаю), есть столбцы со встроенными пробелами, убедитесь, до

`wrap in tic marks` 

, поэтому движок распознает всю строку как имя столбца.

0

Я думаю, что в вашем коде есть некоторая путаница.

Оператор SELECT может возвращать 4 поля, такие как: ID, TestData1, TestData2, TestData3.

Затем вы заполняете DataTable записями, полученными из базы данных.

Затем вы создаете новый DataRow в DataTable (который будет содержать четыре столбца, соответствующие инструкции SELECT). Вы размещаете значения в редактируемые поля (а не в поле ID).

Затем вы добавляете DataRow в DataTable.

Вот его, где он смешивается ...

создается SQL Update Query String - затем добавить эту строку в качестве DataRow в DataTable.

При обновлении DataTable через MySqlDataAdapter последний DataRow не является допустимой записью, которая должна быть проанализирована адаптером.

Попробуйте удалить две строки:

string Query = "Update example(field 1, field 2, field 3) VALUES ("TestData1", "TestData2", "TestData3")"; 
dTable.Rows.Add(Query);