【问题标题】:Delete data from Access using SQL Query - C#使用 SQL 查询从 Access 中删除数据 - C#
【发布时间】:2017-02-20 10:49:17
【问题描述】:

\我在一个访问数据库表(DATA)中有三列,如下所示

我只想根据 SQL 查询中WHERE 子句中的两个条件删除一些行;例如,当 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();
}

【问题讨论】:

  • 这不是 c# 问题!它不喜欢你的日期格式。请删除c#标签
  • 我添加了 C# 代码。我第一次在 Access 中尝试它,并且会在 C# 中使用相同的查询。 @BugFinder
  • @Steve : 发布了
  • 如果字段 (DATA) 是 DateTime 类型的字段,那么这不是传递值的正确方法。数据是访问中的日期时间字段吗?
  • 是的,它被定义为“日期时间”@Steve

标签: c# ms-access qsqlquery


【解决方案1】:

将值传递给将在查询中使用的数据库引擎的最佳方式是通过参数集合准确指定参数的类型

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();
}

通过这种方式,您不会为您的值的解释(从字符串转换为日期)留出空间,但您可以准确地告诉您的数据库引擎您的值是什么。当然,如果你指定了正确的类型,你就不会出现类型不匹配错误

【讨论】:

  • 啊啊有趣!我怀疑这个问题是因为我使用“日期”作为列名;日期是关键字。谢谢! @史蒂夫
  • 使用参数是您需要作为列值传递的每件事的方法(WHERE、INSERT、UPDATE、DELETE)此外,虽然在 MS-Access 中更难利用“谢谢”对于缺少的批量更新功能,这是避免Sql Injection mess的正确方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多