2013-01-21 2 views
0

Сначала я попытался это:не удается ОБНОВИТЬ в файл .mdb с помощью C#

string set = ""; 
    for (int i = 1; i < result.Count; i++) 
    { 
     if ((fieldtypes[i] == "System.Int32")) 
     { 
      set += fields[i] + "=" + result[i] + ", "; 
     } 
     else if (fieldtypes[i] == "System.String") 
     { 
      set += fields[i] + "='" + result[i] + "', "; 
     } 
     else if (fieldtypes[i] == "System.Boolean") 
     { 
      set += fields[i] + "=" + result[i] + ", "; 
     } 
     else if (fieldtypes[i] == "System.DateTime") 
     { 
      set += fields[i] + "='#" + System.DateTime.Now + "#', "; 
     } 
    } 
    set = set.Substring(0, set.Length - 2); 
    string sql11 = "UPDATE [Contacts] SET " + set + " WHERE pkContactID=" + cKey; 
    OleDbCommand myCommand11 = new OleDbCommand(sql11, myConnection); 
    myCommand11.ExecuteNonQuery(); 

Теперь это РАБОТАЛ, когда я опустил строки и даты-времени условия, чтобы он только обновили Int и логическое значение. Поэтому это связано с синтаксической ошибкой, когда я пытаюсь обновить поле, где тип является строкой.


Потом я слышал, что вы должны использовать параметры при записи в файл .mdb, поэтому я попытался это:

 string sql11 = "UPDATE [Contacts] SET "; 
     for (int i = 1; i < result.Count; i++) 
     { 
      sql11 += fields[i] + " = ?, "; 
     } 
     sql11 = sql11.Substring(0, sql11.Length - 2); 
     sql11 += " WHERE pkContactID = " + cKey; 
     using (myConnection) 
     { 
      using (OleDbCommand myCommand11 = new OleDbCommand(sql11, myConnection)) 
      { 
       myCommand11.CommandType = CommandType.Text; 
       for (int j = 1; j < result.Count; j++) 
       { 
        if (fieldtypes[j] == "System.Int32") 
        { 
         myCommand11.Parameters.AddWithValue(fields[j], int.Parse(result[j])); 
        } 
        else if (fieldtypes[j] == "System.String") 
        { 
         myCommand11.Parameters.AddWithValue(fields[j], result[j]); 
        } 
        else if (fieldtypes[j] == "System.Boolean") 
        { 
         myCommand11.Parameters.AddWithValue(fields[j], Boolean.Parse(result[j])); 
        } 
        else if (fieldtypes[j] == "System.DateTime") 
        { 
         myCommand11.Parameters.AddWithValue(fields[j], DateTime.Now); 
        } 
       } 
       Console.WriteLine(sql11); 
       myCommand11.ExecuteNonQuery(); 
      } 
     } 
    } 

Который не работает. Я не думаю, что они заменены должным образом.

В любом случае, пожалуйста, помогите мне исправить это, чтобы я мог правильно обновить.

+0

я не знаю, что вы пытаетесь сделать точно, но прямо сейчас, вы сравниваете каждый J в вашем массиве с String. Независимо от того, что находится между кавычками. – Thousand

+0

Возможный дубликат [Вставка и обновление данных в MDB] (http://stackoverflow.com/questions/8625569/inserting-and-updating-data-to-mdb) –

+0

Значения OleDBParameters следует добавлять в том порядке, в котором они появляются в тексте команды sql – Steve

ответ

0

Вместо того, чтобы обходиться с помощью строки запроса UPDATE для Access, которая легко подвержена синтаксическим ошибкам, я просто создал объект DataTable и SELECTed строку, которую я хотел бы ОБНОВИТЬ. Затем я обновил таблицу через массив элементов, которые я хотел изменить, а затем обновил таблицу на сервере с помощью адаптера. Это хорошо сработало, не беспокоясь о синтаксисе! :)

Приветствия

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