DataAdapater:具有空行

时间:2016-02-06 07:00:11

标签: c# asp.net dataset

我正在尝试使用Dataset填充SqlDataAdapter。为此我写了一个简单的函数,如下所示

public static DataTable GetData(string Query, SqlParameter[] parameters=null)
{
    using (ReliableSqlConnection con = new ReliableSqlConnection(DBUtility.ConnectionString))
    {
        try
        {
            var cmd = con.CreateCommand();
            cmd.CommandText = Query;

            if (parameters != null)
            {
                foreach (SqlParameter p in parameters)
                {
                    cmd.Parameters.Add(p);
                }
            }
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            DataSet ds = new DataSet();
            //da.FillSchema(ds, SchemaType.Source);
            da.Fill(ds);
            return ds.Tables[0];
        }
        catch (StackOverflowException ex)
        {
            return null;
        }catch
        {
            return null;
        }
    }
}

这是最新修改的版本,当我调用此函数时,我得到了

Exception of type 'System.StackOverflowException' was thrown.异常,我的IIS崩溃并关闭实时服务器上的应用程序池。 (在Visual Studio中,它只是停止调试器)。哦,当我的Query返回一个Empty记录集时会发生这种情况,即我的查询有效但返回零行。如果数据存在,它就可以正常工作。

我搜索并且因为这个问题(How to fill a dataset with metadata even if the select query return no rows)建议使用FillSchema,我尝试但没有发现任何变化。我有" table"填写的名称定义,我删除但仍然没有变化。即使这段代码在Try catch中,它仍然会崩溃服务器(我没有看到典型的ASP.NET错误页面,但发生这种情况时会出现503 Service not found类错误。

我正在使用.NET Framework 4.5.1 / 4.6.1(是的,尝试在2版本上运行)。

An unhandled exception of type 'System.StackOverflowException' occurred in System.Data.dll

我只是意识到我的其他查询空记录并没有失败,然后我意识到,对于查询,它失败了一个列为" varchar(max)"作为数据类型,测试它是否为真,但我认为这是错误原因。

失败的查询是:select TitleName, [Message] from tblVerbiage where SaleId=@SaleID

我尝试强制转换为varchar(200),但它仍然会出错。所以,我的想法可能是我的表有点腐败?我做了DBCC checktable,返回成功。我注意到此错误仅在此表中出现。

解决

事实证明,代码中存在迭代查询的逻辑问题,因此可能会发生一些导致错误的内存泄漏。

0 个答案:

没有答案