2012-04-20 1 views
0

У меня есть таблица Access, в которую я недавно добавил поле вложения. В таблице приведен список компьютеров и информация о каждом компьютере. Пользователи этого приложения, программное обеспечение установлено и так далее. Поле Attachment будет содержать простой текстовый файл конфигурации, полученный с каждого компьютера.C# Обновление поля вложения в существующем Access DB

Я работал с некоторыми код здесь: Programmatically managing Microsoft Access Attachment-typed field with .NET

Моя проблема в том, что я не могу показаться, чтобы обновить правильное поле. Значение файла конфигурации для имени компьютера Боб становится помещенным в правильное поле, но неправильным компьютером, если это имеет смысл. Ниже приведен пример инструкции SQL.

Select * From MyTable WHERE ComputerName Like 'Bob' 

Весь сегмент кода ниже в соответствии с запросом.

public void InsertFile(String Path, String CmpName) 
{ 
    DBEngine dbe = new DBEngine(); 
    Database db = dbe.OpenDatabase("MyAccessDB.accdb", false, false, ""); 
    Recordset rs = db.OpenRecordset(
     "SELECT * FROM MyTable WHERE ComputerName LIKE '" + CmpName + "\'", 
     RecordsetTypeEnum.dbOpenDynaset, 0, LockTypeEnum.dbOptimistic); 
    rs.MoveFirst(); 
    rs.Edit(); 
    Recordset2 rs2 = (Recordset2)rs.Fields["My_File"].Value; 
    rs2.AddNew(); 
    Field2 f2 = (Field2)rs2.Fields["FileData"]; 
    f2.LoadFromFile(Path); 

    rs2._30_Update(); 
    rs2.Close(); 
    rs._30_Update(); 
    rs.Close();   
} 

Я надеялся, что при использовании OpenRecodeset() приведенное выше утверждение дало бы мне только эту строку, а затем только поле вложения для этой строки. Однако, это не так. Я искал, как найти итерировать набор записей, чтобы найти нужную строку без везения. Я здесь новичок, поэтому надеюсь, что все, что мне нужно, я покрыл.

+0

Можете ли вы показать код вокруг этого заявления? – Steve

ответ

0

Я не уверен, если я понять ваш вопрос, но если все, что вы хотите это поле вложения Вашего SQL-запрос должен быть:

"SELECT attachment FROM MyTable WHERE UCASE(ComputerName) = 'BOB'" 
+0

Это сработало отлично, спасибо вам большое. – Enonra

+0

Добро пожаловать. Я обычно избегаю LIKE в SQL, так как это поведение отличается от разных движков базы данных. Самый простой способ - просто преобразовать обе строки в верхний регистр, а затем выполнить сравнение. –

0

Обратите внимание, что, когда пункт WHERE ComputerName Like 'Bob' будет работать только надежно, если поле ComputerName является либо полем первичного ключа, либо если у вас есть уникальный индекс, определенный на нем.

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


UPDATE

НЕ используйте LIKE сравнение, если ComputerName является первичным ключом, используйте = вместо этого.

SELECT attachment FROM MyTable WHERE ComputerName = 'Bob' 
+0

Поле ComputerName является первичным ключом и благодарит вас. – Enonra