DataTable 总是返回空值

Posted

技术标签:

【中文标题】DataTable 总是返回空值【英文标题】:DataTable is always returns empty values 【发布时间】:2011-02-17 10:16:11 【问题描述】:

我是 .NET 新手,我必须编写执行存储过程并返回 DataTable 的函数。

我的 SqlConnection 已经初始化,在调试器中运行时我可以看到 DataAdapter 返回值,但我的 DataTable 是空的。

 public DataTable ExecStoredProcedure(String spName, String uId)
        
            DataTable dt = new DataTable();
            try
            
                conn.Open();
                SqlCommand cmd = new SqlCommand(spName, conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@UnitIDList", uId);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
            
            catch (SqlException ex)
            
                throw new Exception(ex.StackTrace + ex.Message);
            
            finally
            
                conn.Close();
            

            return dt;
        

请帮忙。

【问题讨论】:

尝试使用profiler查找SQL server上执行了什么SQL,看看是否真的返回任何结果。也许你会在那里找到一些东西。 是的。它返回结果。如果我在调试器中运行,我会看到它。 【参考方案1】:

我看不出这段代码有什么问题,我自己使用自己的存储过程运行了它。看起来不错。

当您在调试器中单步执行代码并到达以下行时:

da.Fill(dt);

让它运行然后在执行下一行之前检查WatchImmediate 窗口中dt.Rows.Count 的值。报告的数字是多少?

如果是dt.Rows.Count > 0,那么您需要检查您正在使用从您的方法获得的 DataTable 执行某些操作的代码 - 这就是问题所在。

如果dt.Rows.Count ==0 则它不会从存储过程中返回任何数据 - (这似乎不是您遇到的问题)并且您需要查看存储过程中的 SQL。看看并发布你的发现...

【讨论】:

【参考方案2】:

SqlDataAdapter 结果返回一个空的DataTable 时遇到了同样的问题,但在我的情况下,原因是我有两个参数(“CheckDate1”和“CheckDate2”,存储过程是不是我的顺便说一句。)声明为SqlDbType.DateTime类型。然而,一个非常聪明的人将它们定义为VARCHAR(10),我一开始就忽略了。

不幸的是,这并没有导致错误消息,而只是返回了一个空的结果集。一旦我更改了参数类型,我就得到了预期的结果。

希望这对其他人有帮助。

G.

【讨论】:

以上是关于DataTable 总是返回空值的主要内容,如果未能解决你的问题,请参考以下文章

对 DataTable 字符串列进行排序,但底部为空/空

存储过程无法得到返回型参数

读取sqlite数据库时用SQLiteDataAdapter填充Datatable时遇到的问题。

C#DataTable去掉空白行.C#导入excel总是有几行空白的,如何去除

如何处理 JsonConvert.DeserializeObject 中的空值/空值

如何获取datatable的某个值?