Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除和访问_C#_Database_Ms Access - Fatal编程技术网

C# 删除和访问

C# 删除和访问,c#,database,ms-access,C#,Database,Ms Access,这个语句中的错误在哪里 query = "DELETE TOP 10 FROM table WHERE field LIKE \"something*\"" 我在查询sytax时出错 谢谢。注意引号 例如“something*”不能将TOP与DELETE一起使用。您必须识别行,然后删除它们。试试看 query = "DELETE * from (Select TOP 10 * FROM table WHERE field LIKE \"something*\")" 虽然不能直接将top与D

这个语句中的错误在哪里

query = "DELETE TOP 10 FROM table WHERE field LIKE \"something*\""
我在查询sytax时出错


谢谢。

注意引号 例如“something*”

不能将TOP与DELETE一起使用。您必须识别行,然后删除它们。

试试看

query = "DELETE * from (Select TOP 10  * FROM table WHERE field LIKE \"something*\")"

虽然不能直接将top与Delete一起使用,但可以将其用于派生表,然后从派生表中删除

这可能是也可能不是,取决于您正在使用的数据库,但您可以这样编写查询:

DELETE FROM TBLWHATEVER WHERE FLDWHATEVER LIKE 'something%' AND ROWNUM < 10
query0 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"D\""
query1 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"H\""
query2 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"L\""
query3 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"P\""
query4 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"T\""
query5 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"X\""
query6 = "DELETE FROM table WHERE field LIKE \"something*\"

这取决于您的数据库是否具有类似ROWNUM的查询功能。

如果您不能同时执行所有删除操作,并且无法移动到更具可扩展性的数据库,则您可以尝试根据其他字段对数据进行分区并执行多次删除

假设有一个名为name的字段,它在整个字母表中的分布大致均匀。您可以像这样执行多次删除:

DELETE FROM TBLWHATEVER WHERE FLDWHATEVER LIKE 'something%' AND ROWNUM < 10
query0 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"D\""
query1 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"H\""
query2 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"L\""
query3 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"P\""
query4 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"T\""
query5 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"X\""
query6 = "DELETE FROM table WHERE field LIKE \"something*\"

您可以使用这样的嵌套查询来实现此功能

从[TABLE]中删除,其中[Col1]= 从[TABLE]中选择前10位[Col1],其中[criteria]按[criteria]排序 ;

注意,在子查询中,您只需通过指定要从Col1中删除的内容,将列表输入到主删除查询中,条件越多,所需资源就越少,因为删除选项越多

为了测试这一点,首先省略语法中的DELETE-FROM部分,只需运行查询,这样您就可以看到像下面这样将要输入DELETE语句的内容

从[TABLE]中选择前10位[Col1],其中[criteria]按[criteria]排序

如果子查询返回的结果超过10个,那么使用ORDER BY子句是很重要的,这样您就可以更好地控制要删除的内容。

试试看

Delete * from [tablename] where ID in (Select Top 10 ID from [Tablename] Where [Field] Like '*Condition*'

这样,您就不会在*everything中查找*所有内容。

您能够直接在access数据库中运行查询而不是从代码中运行查询吗?我假设您正在尝试从c代码运行查询您是否使用ODBC驱动程序?如果是这样,它可能会将语句包装到事务中,这可能会导致您在其他注释中提到的“资源不足”错误。如果要删除Jet/ACE表中的所有记录,只需删除*即可,因为Jet/ACE将其优化为截断。因为它是一个2 GB的大型数据库,如果我在几分钟后删除行而不限制它们,我会得到一个错误,即资源不足,我必须删除大约150k行。有没有跳过这一点的想法?我支持使用更大容量的数据库是合适的建议,但对Jet/ACE不是真正的数据库的说法提出质疑。每个人都这么说,但没有人能够确定是什么让它成为现实。试着运行子查询Select TOP 10*FROM table WHERE字段,如\something*\以查看是否可以返回任何结果。让我知道它是否在那一点出错,或者是否是删除。无论Jet/ACE是否有函数ROWNUM或类似的函数,当然,在愉快地建议它之前,你个人无法调查它。哦,上帝,你又来了。我为再次贬低你的宝贝而道歉。感谢您提醒我将ms access放在我的排除标签列表中。您设法在不贬低access的情况下发布了帖子,但您给出的答案是错误的,因为您懒得检查您出色的解决方案是否适用于所问的问题。如果我对一个Oracle问题给出了一个特定于Access的答案,那么其他人嘲笑我没有费心去弄清楚答案是否适用是完全正确的。事实上,大卫,其他人嘲笑你是不完全正确的,特别是如果你在你的评论前加了这样的话,我不知道,这可能是可能的,也可能是不可能的,这取决于您使用的数据库。如果您对Oracle的一个问题给出了特定于Access的答案,我会简单地假设您和我一样,只是没有注意到标签,我就不理您了。@MusicGenesis:您是如此成熟的典范。你为什么不干脆删除你那篇无用的帖子,把它处理掉呢?