2012-05-17 4 views
1

Я использую OleBdCommand для вставки записи в Db, но обновление никогда не сохраняется.SQL - OleDbCommand не обновляет DB

Вот код

public void InsertCandidate(XElement element, ref OleDbDataAdapter adapter, OleDbConnection sqlConnStr) 
    { 
     if (sqlConnStr.State == ConnectionState.Broken || sqlConnStr.State == ConnectionState.Closed) 
      sqlConnStr.Open(); 

     try 
     { 
      string query = "Insert Into Candidate Values(@priKey, @Name, @LName, @Phone, @Add)"; 
      OleDbCommand InsertCandidate = new OleDbCommand(query, sqlConnStr); 
      InsertCandidate.Parameters.AddWithValue("priKey", element.Attribute("CAND_NUM").Value); 
      InsertCandidate.Parameters.AddWithValue("Name", element.Attribute("CAND_FNAME").Value); 
      InsertCandidate.Parameters.AddWithValue("LName", element.Attribute("CAND_LNAME").Value); 
      InsertCandidate.Parameters.AddWithValue("Phone", element.Attribute("CAND_PHONE").Value); 
      InsertCandidate.Parameters.AddWithValue("Add", element.Attribute("CAND_ADDRESS").Value); 
      InsertCandidate.ExecuteNonQuery(); 
     } 
     catch (OleDbException ex) 
     { 
      MessageBox.Show("A Error occured whilst trying to execute the command.\n" + ex.Message); 
     } 
    } 

NO исключения, ошибки или аномалии генерируются!

Любые консультации

M


Я даже попытался это.

  //InsertCandidate.ExecuteNonQuery(); 
      adapter.InsertCommand = InsertCandidate; 
      adapter.InsertCommand.ExecuteNonQuery(); 

* Спасибо Каждый One *

код Эйден работал, но я должен был прочитать Тони Post Лучше, следовательно, я принял его ответ (он сказал, что это первый)

С наилучшими пожеланиями

И еще раз спасибо!

+0

Получены ли какие-либо сообщения об ошибках или исключения? Было бы полезно получить дополнительную информацию, чем «обновление никогда не сохраняется». – Tony

+2

Попробуйте 'MessageBox.Show (InsertCandidate.ExecuteNonQuery(). ToString());', чтобы узнать, получаете ли вы нуль или один. – LarsTech

+0

@ LarsTech я получаю 1 - Что это значит. Заранее спасибо – Markus

ответ

2

Выполняли ли вы свой SQL-запрос отдельно от кода, чтобы убедиться, что он работает?

Поскольку вы не разместили определение таблицы, это может быть связано с тем, что вы не указали поля в своем заявлении insert.

Я не эксперт OLEDB, но все примеры, которые я могу найти на таблицах вопросов использования сети вместо параметров. Попробуйте заявление SQL, как это:

string query = "Insert Into Candidate Values(?, ?, ?, ?, ?)"; 

Update

Глядя на документацию для OleDbCommand это будет только бросить InvalidOperationException и не OleDbException в случае ошибки. Вы должны добавить этот обработчик исключений и посмотреть, дает ли он вам больше информации.

Альтернативно, вы можете изменить свой hinddler исключения, чтобы поймать общий тип Exception, чтобы узнать, есть ли у вас исключение.

+0

Извините, и у меня есть - это работает отлично, но я не понимаю, почему это происходит. – Markus

+0

У меня также есть такая статья из MSDN - они говорят, что вы не можете иметь именованные параметры, но я знаю, что это не так! Спасибо, но это не работает. – Markus

+0

Спасибо, что добавил исключение как InvalidOperationException и все еще нет ошибок. – Markus

1
  string query = "Insert Into Candidate Values(?, ?, ?, ?, ?)"; 
      OleDbCommand InsertCandidate = new OleDbCommand(query, sqlConnStr); 
      InsertCandidate.Parameters.AddWithValue("@?", element.Attribute("CAND_NUM").Value); 
      InsertCandidate.Parameters.AddWithValue("@?", element.Attribute("CAND_FNAME").Value); 
      InsertCandidate.Parameters.AddWithValue("@?", element.Attribute("CAND_LNAME").Value); 
      InsertCandidate.Parameters.AddWithValue("@?", element.Attribute("CAND_PHONE").Value); 
      InsertCandidate.Parameters.AddWithValue("@?", element.Attribute("CAND_ADDRESS").Value); 
      //InsertCandidate.ExecuteNonQuery(); 
      adapter.InsertCommand = InsertCandidate; 
      adapter.InsertCommand.ExecuteNonQuery(); 

это сработает!

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