相关疑难解决方法(0)

如何从SQL Server获取数据到SqlDataReader?

当我调用此代码时:

using (var connection = new SqlConnection(connectionString))
{
    var command = new SqlCommand("SELECT * FROM Table", connection);
    connection.Open();
    using (var reader = command.ExecuteReader())
    {
        while(reader.Read())
        {
            // Do something here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

内部会发生什么?这在网络层面如何运作?是否会为每次调用进行新的数据库往返,Read或者内部是否有批量读取?

我这么问是因为我刚才读的ODP.NET提供FetchSize两个属性OracleCommandOracleDataReader我的理解是多少记录应通过单次往返于数据库中预装的定义.我想知道SQL Server是否以类似的方式工作,并且是否存在可以在某处配置的类似行为.我没有找到任何这样的配置SqlCommand,SqlDataReaderCommandBehavior.

.net sql-server oracle ado.net odp.net

17
推荐指数
1
解决办法
2655
查看次数

使用async/await与DataReader?(没有中间缓冲区!)

我的目标很简单,我想做异步I/O调用(使用异步等待) - 但是:

好.

目前这里是我的代码,它的工作是从db读取并将每一行项目投射到a Func<>

public IEnumerable < T > GetSomeData < T > (string sql, Func < IDataRecord, T > projector)
{
    using(SqlConnection _conn = new SqlConnection(@"Data Source=..."))
    {
        using(SqlCommand _cmd = new SqlCommand(sql, _conn))
        {
            _conn.Open();
            _cmd.CommandTimeout = 100000;
            using(IDataReader rdr = _cmd.ExecuteReader())
            {
                while (rdr.Read())  yield    return projector(rdr);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那么,投影机是什么?

每个类都有一个函数,它获取a record(IDataRecord)并创建一个实体:

示例:

public class MyClass
{
    public static MyClass MyClassFactory(IDataRecord …
Run Code Online (Sandbox Code Playgroud)

c# io asynchronous async-await .net-4.5

14
推荐指数
1
解决办法
2万
查看次数

如何使这个异步?(异步,等待 - C#,MVC)

我只是尝试将我的ASP .NET MVC应用程序的一部分异步,但即使在阅读并尝试了很多之后我也不太了解async-await模式并希望有人能给我一个提示.

基本上我有以下几点:

  1. 一个javascript调用我的控制器获取图表的部分视图(这在很多图表的页面加载后发生了几次)

    // Load content of one chart
    my.loadChartContent = function (data, callback) {
    $.post("/Dashboard/GetChartContent/", data, function (datain) {
        if (isFunction(callback))
            callback(datain);
    });
    };
    
    Run Code Online (Sandbox Code Playgroud)
  2. 控制器操作,在另一个类中调用数据库方法

    public ActionResult GetChartContent(int id, bool isDraft = false)
    {
        //do something
        //...
    
        var chartdata = _dataService.GetDataForChart(chart, isDraft, _user.Id); //long running query
    
        //do something with chartdata
    
        return View(chartdata);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 数据类(_dataService),它使用SqlDataReader从数据库中获取数据,并使用该数据加载DataTable.

问题是虽然javascript是异步执行的,但是在DataService类返回结果之前,Controller-Actions似乎被阻塞了.我想启动对数据库的所有查询并异步等待结果,以便长时间运行的查询不会阻止较短的查询.(在SQL Server Profiler中,我将查询视为Begin-End,Begin-End,Begin-End =>但它应该是begin-begin-begin - end-end-end)

我应该在哪里使用async-await?是否足以将它(某种程度上)用于我的控制器动作,还是必须使整个"调用链"异步?

更新: 当我使用SQLConnection.OpenAsync和ExecuteReaderAsync时,代码永远不会完成......我不明白为什么?

    public async Task<Query> GetSqlServerData(Query query)
    {
        var dt = new DataTable();
        var con = …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc asynchronous async-await

4
推荐指数
1
解决办法
1万
查看次数