2015-10-30 2 views
0

Он может обновлять тип поля Текст.Ошибка Только обновление Тип поля Вложение MS-Access C# WindowForm

string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\test.accdb;"; 
     using (OleDbConnection MyConn = new OleDbConnection(ConnStr)) 
     { 
      MyConn.Open(); 
      var StrCmd = "UPDATE Table1 SET Field1 = @p2 WHERE ID = @p1"; 
      OleDbCommand oldcommand = new OleDbCommand(StrCmd, MyConn); 
      byte[] pic = File.ReadAllBytes(@"D:\test.png"); 

      oldcommand.CommandType = CommandType.Text; 
      oldcommand.CommandText = StrCmd; 
      oldcommand.Parameters.AddWithValue("@p2", "test"); 
      oldcommand.Parameters.AddWithValue("@p1", "1"); 
      try 
      { 
       oldcommand.ExecuteNonQuery(); 
      } 
      catch (Exception ex) 
      { 

      } 

Но оно не может обновить тип поля Приложение.

Ошибка Не задано значение для одного или нескольких требуемых параметров.

string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\test.accdb;"; 
     using (OleDbConnection MyConn = new OleDbConnection(ConnStr)) 
     { 
      MyConn.Open(); 
      var StrCmd = "UPDATE Table1 SET Field2.Value = @p2 WHERE ID = @p1"; 
      OleDbCommand oldcommand = new OleDbCommand(StrCmd, MyConn); 
      byte[] pic = File.ReadAllBytes(@"D:\test.png"); 

      oldcommand.CommandType = CommandType.Text; 
      oldcommand.CommandText = StrCmd; 
      oldcommand.Parameters.AddWithValue("@p2", pic); 
      oldcommand.Parameters.AddWithValue("@p1", "1"); 
      try 
      { 
       oldcommand.ExecuteNonQuery(); 
      } 
      catch (Exception ex) 
      { 

      } 

My Database MS-Access Error Picture

+0

Извините, но мне не совсем понятно, что вы пытаетесь сделать. Вы пытаетесь изменить тип столбца? –

ответ

0

Attachment поле введено в ACE Engine с MS Access 2007 является complex data type, который фактически содержит несколько полей в каждой записи (скрытые в графическом интерфейсе доступа):

  1. название файла
  2. расширение файла
  3. двоичное содержимое файла

Следовательно, вы не сможете запускать любые запросы (выберите с помощью объединений, обновлений или добавить) непосредственно с ним. На самом деле вы не можете запустить DDL procedures с таким типом поля. Вы можете использовать графический интерфейс доступа только для управления полем.

Часто регулярные дебаты, особенно на SO, включают хранение медиа или другого двоичного содержимого (документов, PDF и т. Д.) Внутри базы данных или файловой системы. Переносимость - огромное преимущество для бывших и производительности для последних. Из-за ограничения типа данных привязки ACE рассмотрите возможность хранения ссылок на пути в базе данных в виде строки, которая ссылается на файлы, хранящиеся извне. Тогда ваше приложение может выполнить любой требуемый запрос.

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