0

我是 .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;
        }

请帮忙。

4

2 回答 2

1

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

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

da.Fill(dt);

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

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

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

于 2011-02-17T12:02:23.213 回答
1

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

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

希望这对其他人有帮助。

G。

于 2011-12-09T11:12:58.403 回答