none
SqlDataAdapter Fill DataTable 数据不完整 RRS feed

  • 问题

  • SqlDataAdapter Fill 方法填充DataTable 出现数据丢失情况。Select语句直接在SSMS中执行出的结果是自己想要的结果,确定SQL语句是正确的。

    部分代码如下:

    using (var sqlDataAdapter = CreatDbDataAdapter(sql, DbConn))
                {
                    sqlDataAdapter.SelectCommand.CommandType = CommandType;
                    if (pars != null)
                        sqlDataAdapter.SelectCommand.Parameters.AddRange(pars);

                    sqlDataAdapter.SelectCommand.CommandTimeout = CommandTimeOut;
                    if (DbTran != null)
                    {
                        sqlDataAdapter.SelectCommand.Transaction = DbTran;
                    }
                    CheckConnect();
                    if (DbConn.State != ConnectionState.Open)
                        return new DataTable();
                    var dt = new DataTable();
                    try
                    {
                         sqlDataAdapter.Fill(dt);
                     
                        if (IsClearParameters)
                            sqlDataAdapter.SelectCommand.Parameters.Clear();
                        ExecLogEvent(sql, pars, false);
                    }
                    catch (Exception ex)
                    {
                        if (IsEnableAutoLog)
                            Logger.Error(ex.Message);
                        return null;
                    }
                    return dt;
                }

    请问有遇到过此类问题的朋友吗?帮忙指点下,谢谢。

    2018年7月8日 2:04

全部回复

  • 用SQL Profiler跟踪一下您的程序产生的SQL语句是怎样的,再与SSMS中的SQL对比(Select语句直接在SSMS中执行)。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2018年7月9日 0:18
  • 我程序产生的SQL语句已经输出在跟踪日志当中,在SSMS中直接执行Select语句得到的结果是正确的,但是使用SqlDataAdapter 的Fill方法填充DataTable 会出现(比如Select查询出是100行,使用Fill填充DataTable 只有40行)。有时候还会出现不在查询时间段内的数据。
    2018年7月9日 0:50
  • 你好,

    检查一下你的连接字符串,看看是否和你使用的数据库是同一个数据库, 另外根据Shuanghua Li 所说,使用SQL Profile 工具跟踪一下里面的SQL 语句,看看是否是你预期执行的SQL 语句。

    Best regards,

    Zhanglong


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2018年7月10日 1:29
    版主
  • 数据库连接字符串,查询的目标数据库,预期执行的Select语句是正确的,在SSMS中直接执行的结果是对的。

    目标数据库是SQLServer2008 R2 Express版本,使用 SqlDataAdapter 的 Fill 方法填充 DataTable ,不规律的出现填充数据变少或者为0的情况,有时候也会出现不在查询时间范围段内的数据。

    2018年7月10日 3:08
  • 比较奇怪的是:我把数据库切换成SqlServer 2008 企业版后这个填充数据变少或者错乱的情况 不出现了。因为产品使用的Express版本数据库所以还是得去解决这个问题。另外,我是通过并行计算执行查询动作,不知道跟这个有没有关系?
    2018年7月10日 3:11
  • 你好,

    你可以做一个简单的例子, 使用SQL Server 2008 R2 Express 在测试一下, 看看能不能重现这个问题。

    Best regards,

    Zhanglong


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年7月10日 7:47
    版主
  • OK,已经解决!是并行计算引起的冲突,已经加Lock解决,谢谢各位
    2018年7月12日 2:07