2016-07-18 2 views
0

Я пишу, потому что у меня проблема с обновлением записей в моей базе данных доступа. Я ищу запись, используя select (по id), и я показываю ее в datagridview. Затем я хочу изменить его. В представлении datagrid и обновлении изменились записи с использованием измененного набора данных. Когда им пытаются сделать это у меня есть исключение: «Метод OledbCommand.Prepare требует, чтобы все переменные параметры длины, чтобы иметь явно установить ненулевую размер»C# Обновление базы данных доступа с использованием набора данных

Это мой код:

private void button2_Click(object sender, EventArgs e) 
    { 



     connection = new OleDbConnection(connetionString); 
     connection.Open(); 
     string sel = "SELECT * from Table where [email protected]"; 




      oledbAdapter = new OleDbDataAdapter(); 
     OleDbCommand cmd = new OleDbCommand(sel, connection); 
     cmd.Parameters.Add("@Id", OleDbType.Char).Value = textBox1.Text; 
     oledbAdapter.SelectCommand = cmd; 
     oledbAdapter.Fill(ds); 
      dataGridView1.DataSource = ds.Tables[0]; 

     connection.Close(); 


    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 

    } 

    DataTable ndt = new DataTable(); 
    OleDbCommandBuilder scb; 
    private void button1_Click(object sender, EventArgs e) 
    { 


     connection = new OleDbConnection(connetionString); 
     connection.Open(); 

     DataSet changes; 
     changes = ds.GetChanges(); 
     ds.AcceptChanges(); 
     if (changes != null) 
     { 


      OleDbCommandBuilder builder = new OleDbCommandBuilder(oledbAdapter); 


      oledbAdapter.UpdateCommand = builder.GetUpdateCommand(); 


      oledbAdapter.Update(changes); 
      ds.AcceptChanges(); 

     } 
     ds.AcceptChanges(); 
     MessageBox.Show("Saved"); 

Edit: Спасибо, вы очень помогли мне, но у меня есть другое исключение теперь: D

Ошибка синтаксиса (отсутствующий оператор) в выражении запроса '((ID =?) AND ((? = 1 И Идентификатор платежа ИМЕЕТ NULL) ИЛИ (Идентификатор платежа =?)) И ((? = 1 И НЕ ИМЕЕТ NULL) ИЛИ (CharNo =?)) И ((? = 1 И charName IS NULL) ИЛИ (CharName =?)) и ((? = 1 и МС IS NULL) ИЛИ (MC =?)) и ((? = 1 и зовут НУ».

и при добавлении им

builder.QuotePrefix = "["; 
     builder.QuoteSuffix = "]"; 

я есть несоответствие типов

данных в выражении критериев.

когда им пытаются обновить ..

ответ

0

Попробуйте изменить тип данных поля ID и назначить ему длину.

cmd.Parameters.Add("@Id", OleDbType.VarChar, 25).Value = textBox1.Text; 
+0

Это помогло, но у меня есть несоответствие типов данных теперь, когда им пытаются обновить – Milan90

+0

Не могли бы вы скопировать трассировки стека -> сообщение об ошибке –

+0

Исключение System.Data.OleDb.OleDbException не было обработано ErrorCode = -2147217913 HResult = -2147217913 Сообщение = несоответствие типа данных в выражении критериев. Источник = Microsoft Access Database Engine – Milan90

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