DataTable始终返回空值

时间:2011-02-17 10:16:11

标签: asp.net sql-server-2005 datatable sqldataadapter

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

请帮忙。

2 个答案:

答案 0 :(得分:1)

我看不出这个代码有什么问题,我自己用自己的sproc运行它。看起来很好。

当您在调试器中单步执行代码时,您就会进入以下行:

da.Fill(dt);

让它在执行下一行之前运行,检查dt.Rows.CountWatch窗口中Immediate的值。报道的数字是多少?

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

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

答案 1 :(得分:1)

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

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

希望这可能对其他人有所帮助。

-G。