c# - 当结果为空时,MySqlDataAdapter.Fill 返回什么?

标签 c# mysql

我有一个“worker”函数,它将处理我的程序中的所有 SQL 查询。我将需要执行返回结果集的查询以及仅执行没有任何结果的存储过程的查询。这可以通过 MySqlDataAdapter.Fill 实现吗?还是我需要使用 MySqlCommand.ExecuteNonQuery() 方法?这是我的“worker”函数供引用:

private DataSet RunQuery(string SQL)
    {
        MySqlConnection connection;
        MySqlCommand command;
        MySqlDataAdapter adapter;
        DataSet dataset = new DataSet();

        lock(locker)
        {
            connection = new MySqlConnection(MyConString);
            command = new MySqlCommand();
            command = connection.CreateCommand();
            command.CommandText = SQL;
            adapter = new MySqlDataAdapter(command);
            adapter.Fill(dataset);
        }

        return dataset;
    }

最佳答案

首先,您的工作函数会在 .Fill(dataset) 方法上引发异常。您需要使用 select 命令构建适配器,如下所示:

adapter = new MySqlDataAdapter(command);

针对填充运行非查询的结果将导致数据集不返回任何表。

但是:与使用 cmd.ExecuteNonQuery() 方法相比,使用 Adapter.Fill(dataset) 等 ADO.NET 命令执行非查询命令的效率非常低。

除了构建单独且冗余的 DataAdapter 对象之外,ADO.NET 中进行的每个调用都是虚拟的,并且需要由 CLR 在运行时解析为调用站点。在负载情况下,连续运行该方法会导致很大的GC压力,DataAdapter对象需要不断处理,并且会比仅仅运行command.ExecuteNonQuery();慢得多。

关于c# - 当结果为空时,MySqlDataAdapter.Fill 返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2428234/

相关文章:

c# - .NET 中定时器的最大精度是多少?

javascript - 发送 XMLHttpRequest 未与 Controller 方法绑定(bind)

PHP/MYSQL : Storing a list or massive table

c# - 托管元数据字段中的 AfterProperties 和 BeforeProperties 根据语言返回不同的字符串

c# - Visual Studio 2012 - Razor View 文件 (".cshtml"中的断点)未加载

C# 线程 -ThreadStart 委托(delegate)

php - MySQL 只显示最后的数据

mysql - 具有多个 where 条件的 SQL 多重选择

mysql - SQL 语法 AND OR 子句问题

php - 多项选择 - 保存结果