2017-02-20 11 views
0

\ У меня есть три столбца в таблице базы данных доступа (DATA), как показано нижеУдаление данных из Access с помощью SQL Query - C#

enter image description here

Я просто хочу, чтобы удалить некоторые строки на основе двух условий в WHERE предложение в SQL-запросе; например, NAME = «A» и Date = «1/1/2017»

Я использовал DELETE from DATA Where Name='A' and Date='1/1/2017' Это дает «ошибку несоответствия типа»!

Вот код в C#:

using (OleDbConnection thisConnection = new OleDbConnection(connectionname)) 
{ 
    string deletequery = " DELETE FROM DATA WHERE [Name] = 'A' And [Date] = '1/1/2017'; 

    OleDbCommand myAccessCommandDelete = new OleDbCommand(deletequery, thisConnection); 
    thisConnection.Open(); 
    myAccessCommandDelete.ExecuteNonQuery(); 
    thisConnection.Close(); 
} 
+0

это не проблема C#! он не любит ваш формат даты. пожалуйста, удалите тег C# – BugFinder

+0

Я добавил код C#. Я впервые попробовал его в Access и использовал бы тот же запрос в C#. @BugFinder – user7157732

+0

@Steve: Отправлено – user7157732

ответ

3

Лучший способ передать значения в ядро ​​базы данных, которая будет использоваться в запросе через коллекцию параметров, характеризующих именно тип параметра

using (OleDbConnection thisConnection = new OleDbConnection(connectionname)) 
{ 
    string deletequery = @"DELETE FROM DATA WHERE [Name] = @name And 
         [Date] = @date"; 
    OleDbCommand myAccessCommandDelete = new OleDbCommand(deletequery, thisConnection); 
    thisConnection.Open(); 
    myAccessCommandDelete.Parameters.Add("@name", OleDbType.VarWChar).Value = "A"; 
    myAccessCommandDelete.Parameters.Add("@date", OleDbType.Date).Value = new DateTime(2017,1,1); 
    myAccessCommandDelete.ExecuteNonQuery(); 
    // not needed -> thisConnection.Close(); 
} 

Таким образом, вы не оставляете пространство для интерпретации (преобразование из строки в дату) ваших значений, но вы точно указываете своему движку дБ, каково ваше значение. И, конечно, если вы укажете правильный тип, у вас не может быть ошибки несоответствия типа

+0

aaah interesting! Я подозревал, что проблема связана с тем, что я использовал «Дата» в качестве имени столбца; Дата - ключевое слово. Благодаря! @Steve – user7157732

+0

Использование параметров - это путь для каждой вещи, которую необходимо передать как значение для ваших столбцов (WHERE, INSERT, UPDATE, DELETE). Кроме того, еще труднее использовать в MS-Access «спасибо» отсутствующему пакетному обновлению функциональность, это правильный способ избежать [Sql Injection mess] (http://stackoverflow.com/questions/332365/how-does-the-sql-injection-from-the-bobby-tables-xkcd-comic-work) – Steve