2015-03-12 3 views
-1

Использование xaml/wpf в C# с MySQL; VS 2013; обновленный mysql Net Connector (скачено 3 дня назад)command.parameters.add не работает - mysql C#

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

A first chance exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in System.Data.dll

На этой линии: adapter.Update (prodTable);

В этой функции:

private void UpdateDBValues() 
     { 
      MySqlConnection connection = new MySqlConnection(connString); 
      MySqlDataAdapter adapter = new MySqlDataAdapter(); 

      //Get our current time in our desired string format(##:## AM/PM) 
      DateTime time = DateTime.Now;    // Use current time 
      string format = "h:mm tt";   // Use this format 
      string timeStr = time.ToString(format); 

      //UPDATE 
      string updateString = "UPDATE gas_production " + 
       "SET well_id=?well_id, entry_date=?entry_date, status=?status, " + 
       "event=?event, hours_down=?hours_down, time=?time, mcf=?mcf,static_psi=?static_psi, " + 
       "line_psi=?line_psi, tbg_psi=?tbg_psi, csg_psi=?csg_psi, spm=?spm, cycle=?cycle," + 
       "water=?water, water_line_psi=?water_line_psi, water_meter=?water_meter, comments=?comments" + 
       "WHERE entry_id=?oldentry_id"; 

      MySqlCommand updateCommand = new MySqlCommand(updateString, connection); 
      updateCommand.Parameters.Add("?well_id", MySqlDbType.VarChar, 10, "well_id"); 
      updateCommand.Parameters.Add("?entry_date", MySqlDbType.VarChar, 10, "entry_date"); 
      updateCommand.Parameters.Add("?status", MySqlDbType.VarChar, 20, "status"); 
      updateCommand.Parameters.Add("?event", MySqlDbType.VarChar, 50, "event"); 
      updateCommand.Parameters.Add("?hours_down", MySqlDbType.Int32, 11, "hours_down"); 
      updateCommand.Parameters.Add("?time", MySqlDbType.VarChar, 8, "time"); 
      updateCommand.Parameters.Add("?mcf", MySqlDbType.Int32, 11, "mcf"); 
      updateCommand.Parameters.Add("?static_psi", MySqlDbType.Int32, 11, "static_psi"); 
      updateCommand.Parameters.Add("?line_psi", MySqlDbType.Int32, 11, "line_psi"); 
      updateCommand.Parameters.Add("?tbg_psi", MySqlDbType.Int32, 11, "tbg_psi"); 
      updateCommand.Parameters.Add("?csg_psi", MySqlDbType.Int32, 11, "csg_psi"); 
      updateCommand.Parameters.Add("?spm", MySqlDbType.Int32, 11, "spm"); 
      updateCommand.Parameters.Add("?cycle", MySqlDbType.Int32, 11, "cycle"); 
      updateCommand.Parameters.Add("?water", MySqlDbType.Int32, 11, "water"); 
      updateCommand.Parameters.Add("?water_line_psi", MySqlDbType.Int32, 11, "water_line_psi"); 
      updateCommand.Parameters.Add("?water_meter", MySqlDbType.Int32, 11, "water_meter"); 
      updateCommand.Parameters.Add("?comments", MySqlDbType.VarChar, 255, "comments"); 
      MySqlParameter parameter = updateCommand.Parameters.Add("?oldentry_id", MySqlDbType.Int32, 11, "entry_id"); 
      parameter.SourceVersion = DataRowVersion.Original; 
      adapter.UpdateCommand = updateCommand; 

      //INSERT 

      string insertString = "INSERT INTO gas_production "+ 
       "(entry_id, well_id, entry_date, status, event, hours_down, time, mcf, static_psi" + 
       "line_psi, tbg_psi, csg_psi, spm, cycle, water, water_line_psi, water_meter, comments) " + 
       "VALUES " + 
       "(?entry_id, ?well_id, ?entry_date, ?status, ?event, ?hours_down, ?time, ?mcf, ?static_psi " + 
       "?line_psi, ?tbg_psi, ?csg_psi, ?spm, ?cycle, ?water, ?water_line_psi, ?water_meter, ?comments)"; 

      MySqlCommand insertCommand = new MySqlCommand(insertString, connection); 
      insertCommand.Parameters.Add("?entry_id", MySqlDbType.Int32, 11, "entry_id"); 
      insertCommand.Parameters.Add("?well_id", MySqlDbType.VarChar, 10, "well_id"); 
      insertCommand.Parameters.Add("?entry_date", MySqlDbType.VarChar, 10, "entry_date"); 
      insertCommand.Parameters.Add("?status", MySqlDbType.VarChar, 20, "status"); 
      insertCommand.Parameters.Add("?event", MySqlDbType.VarChar, 50, "event"); 
      insertCommand.Parameters.Add("?hours_down", MySqlDbType.Int32, 11, "hours_down"); 
      insertCommand.Parameters.Add("?time", MySqlDbType.VarChar, 8, timeStr); 
      insertCommand.Parameters.Add("?mcf", MySqlDbType.Int32, 11, "mcf"); 
      insertCommand.Parameters.Add("?static_psi", MySqlDbType.Int32, 11, "static_psi"); 
      insertCommand.Parameters.Add("?line_psi", MySqlDbType.Int32, 11, "line_psi"); 
      insertCommand.Parameters.Add("?tbg_psi", MySqlDbType.Int32, 11, "tbg_psi"); 
      insertCommand.Parameters.Add("?csg_psi", MySqlDbType.Int32, 11, "csg_psi"); 
      insertCommand.Parameters.Add("?spm", MySqlDbType.Int32, 11, "spm"); 
      insertCommand.Parameters.Add("?cycle", MySqlDbType.Int32, 11, "cycle"); 
      insertCommand.Parameters.Add("?water", MySqlDbType.Int32, 11, "water"); 
      insertCommand.Parameters.Add("?water_line_psi", MySqlDbType.Int32, 11, "water_line_psi"); 
      insertCommand.Parameters.Add("?water_meter", MySqlDbType.Int32, 11, "water_meter"); 
      insertCommand.Parameters.Add("?comments", MySqlDbType.VarChar, 255, "comments"); 
      adapter.InsertCommand = insertCommand; 

      //DELETE 
      MySqlCommand deleteCommand = new MySqlCommand("DELETE FROM gas_production WHERE entry_id=?entry_id", connection); 
      MySqlParameter delParameter = deleteCommand.Parameters.Add("?entry_id", MySqlDbType.Int32, 10, "entry_id"); 
      delParameter.SourceVersion = DataRowVersion.Original; 
      adapter.DeleteCommand = deleteCommand; 

      //UPDATE ADAPTER 
      DataTable prodTable = (DataTable)((DataSourceProvider)FindResource("ProdTable")).Data; //get DataTable 
      adapter.Update(prodTable);//finally update 
     } 

я перепечатанные 3 раза, чтобы убедиться, что вся информация есть; попробовали AddWithValues, @ и? sigils, убедитесь, что мой DataTable был похож на мою таблицу MySQL, проверил привязки от xaml до C# (что не имеет значения, должны ли они?) ... что мне здесь не хватает? И/или какой другой подход я могу предпринять, чтобы сделать эту работу? Я считаю, что это в синтаксисе параметров, которые я передаю, но я не могу найти что-то неправильно, и это только порождает эту 1 ошибку ... ничего больше.

Если мне нужно предоставить дополнительную информацию, пожалуйста, дайте мне знать, что вам нужно.

Немного руководство будет очень, очень признателен!

EDIT: Btw, я следую this tutorial

+0

как параметры, определенные/объявленные в MySql, являются такими же, как на сервере Sql ..? если да, то можете ли вы объяснить, что '?' в вашем имени параметра означает – MethodMan

+0

? из строки запроса, которую я передаю в коннектор. "well_id =? well_id", затем передайте это через команду адаптера: updateCommand.Parameters.Add ("? well_id", MySqlDbType.VarChar, 10, "well_id"); Параметры - это функция, используемая с адаптером. Таким образом, параметр не «определен» для каждого из них, но он является частью команды адаптера –

+2

, используя префикс «@» в инструкции, в Parameters.add без «@» –

ответ

0

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

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

  • Нет связанных вопросов^_^