мой код вставляет некоторые данные в БД доступа. Код был сбой в том, что (код использует библиотеку для загрузки электронной почты, но ошибка не по-видимому, связанные с этим):Вставка строки в MS Access с C#
foreach (MimeData mime in email.Attachments)
{
string name = NumEmail + mime.SafeFileName;
string path = (@"\\pathrandom" + name);
mime.Save(path);
long length = new System.IO.FileInfo(path).Length;
String my_querry2 = "INSERT INTO Table(id, field1, field2, field3, field4)VALUES('" + path + "','" + length + "','" + name+ "','" + value3 + "','" + date + "')";
MessageBox.Show(my_querry2);
OleDbCommand cmd2 = new OleDbCommand(my_querry, conn);
cmd.ExecuteNonQuery();
}
(идентификатор, дата и value3 переменные, определенные из Еогеасп с строка foo, дата сегодняшнего дня и строка foo).
Когда я запускаю этот код, вставка не возникает, и ExecutedNonQuery()
возвращает ошибку. Он говорит, что запрос не выполнялся, потому что он создавал бы повторяющиеся значения. Но таблица полностью пуста, поэтому «id» не может быть повторен. Я пытался сделать запрос доступа и делать это:
INSERT INTO AchivosAdjuntos(id, field1, field2, field3, field4)VALUES('\\path','171','x.png','random','28/01/2015')
И она прекрасно работает (значения те же, что в C# попытаться вставить), вставив значения.
Соединение с БД кажется прекрасным, потому что перед этим вставкой я сделал другие, которые хорошо работали.
Итак ... что я делаю неправильно? : S
Пожалуйста, не используйте конкатенацию строить свои заявления SQL, как вы оставляете себя широко открыты для инъекции SQL. Вместо этого используйте параметры. – Matt
Он жалуется на дубликаты ключей. Таким образом, вы пытаетесь вставить две записи с одним и тем же основным ключом или комбинацию значений полей, связанных с определением уникального индекса в вашей таблице. Проверьте, какие индексы и первичные ключи вашей таблицы – Steve
Как я уже сказал, единственным полем с ключом является «id», и таблица полностью пуста, поэтому это не может быть проблемой. Кроме того, я могу вставить те же данные с sql, поэтому я не могу думать, что это действительно проблема дублирования. Я собираюсь попробовать, что сказал Мэтт, и сделать это с параметрами. – Nimrrod