c# - 什么是循环删除查询的最佳方式

标签 c# sql

我一直在尝试根据限制数量逐行删除几行,我试图只删除最新的条目但是,我想出的解决方案不断崩溃 VSHOST,有没有更好的方法来实现结果一样吗?

    private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show("A apagar dados...");
    bool check = true;
    do
    {
        string connectionString;
        var path = @"C:\Users\Administrator\Desktop\connstring.txt";
        using (StreamReader sr = new StreamReader(path))
        {
            connectionString = sr.ReadLine();
        }

        var connection = new SqlConnection(connectionString);

        string queryString = string.Empty;
        using (SqlConnection deleteconnection = new SqlConnection(connectionString))
        {
            deleteconnection.Open();
            connection.Open();
            queryString = "DELETE FROM wgcdoccab WHERE numdoc = (SELECT MAX(numdoc) FROM WGCDOCCAB WHERE serie ='1' and tipodoc ='FSS' and contribuinte ='999999990' and  datadoc = CONVERT(varchar(10),dateadd(dd, -1, getdate()),120))";
            SqlCommand command = new SqlCommand(queryString, connection);
            command.ExecuteNonQuery();
            connection.Close();
        }
        using (SqlConnection deleteconnection = new SqlConnection(connectionString))
        {
            connection.Open();
            deleteconnection.Open();

            queryString = "SELECT max(numdoc) FROM wgcdoccab WHERE serie ='1' and tipodoc ='FSS' and contribuinte ='999999990' and datadoc = CONVERT(varchar(10),(dateadd(dd, -1, getdate())), 120))";
            using (SqlCommand command = new SqlCommand(queryString, connection))
            using (SqlDataReader reader = command.ExecuteReader())
            {
                if (reader.HasRows)
                {
                    check = true;
                }
                else
                {
                    check = false;
                    MessageBox.Show("Dados Apagados com sucesso");
                }
                command.Connection.Close();
            }
        }
    }
    while (check);

代码相对简单,在 do-while 结束后,它变成了无尽的 cicle,因为它总是为 numdoc 返回 NULL 值,我似乎找不到绕过它的方法。 有什么建议吗?

最佳答案

我不明白循环的必要性。为什么不一次删除所有记录?

DELETE FROM wgcdoccab
WHERE 
    serie ='1' and
    tipodoc ='FSS' and
    contribuinte ='999999990' and
    datadoc = CONVERT(varchar(10),dateadd(dd, -1, getdate()),120))";

如果您在循环中重复查询,它无论如何都会删除所有这些记录,而不仅仅是最后的记录。

“最后的”到底是什么意思?最后 2 个是最后 100 个吗?你必须给出“最后一个”的准确定义!

假设您要删除最后 10 个。你可以用这个查询来实现它(假设是 T-SQL):

DELETE FROM wgcdoccab
WHERE numdoc IN (
    SELECT TOP 10 numdoc
    FROM WGCDOCCAB
    WHERE blahh blahh blahh
    ODER BY numdoc DESC
)

关于c# - 什么是循环删除查询的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31906115/

相关文章:

c# - 遍历后加速数组查找?

c# - WPF JumpList 在 Windows 10 中不起作用

sql - Oracle:如何连接替换变量以形成文件名的一部分?

mysql 如何避免 select 请求中的数据重复

sql - PostgreSQL - 需要一种方法来返回所有结果

python - 关于数据库设计基础的问题

c# - 阻止 webclient 转义字符串

c# - 作为查询的一部分返回 rownumber()

c# - 在 Unity3D 的build设置中获取下一个场景的名称?

MySQL REGEXP 未能限制出现次数(?!)