2011-02-17 347 views
0

我是.NET新手,我必須編寫執行存儲過程並返回DataTable的函數。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; 
     } 

請幫忙。

+1

嘗試使用事件探查器查找SQL服務器在SQL服務器上執行的操作,並查看它是否真的返回任何結果。也許你會在那裏找到一些東西。 – decyclone 2011-02-17 10:19:12

回答

1

我看不出這個代碼有什麼問題,我用我自己的sproc自己運行它。似乎很好。

當你踩通在調試你的代碼,你會得到這樣的行:

da.Fill(dt); 

讓那麼它運行在執行下一行之前檢查dt.Rows.Count值在WatchImmediate窗口。報告的數字是多少?

如果dt.Rows.Count > 0那麼你需要檢查你在哪些代碼中使用從你的方法得到的DataTable - 這就是問題所在。

如果dt.Rows.Count ==0那麼它不會從Stored proc返回任何數據 - (這似乎不是您的問題),您需要查看sproc中的SQL。看看併發布你找到的...

1

我有同樣的問題,SqlDataAdapter返回一個空的DataTable作爲一個結果,但在我的情況下,原因是我有兩個參數(「CheckDate1」和「CheckDate2」,存儲過程是而不是我的btw。)聲明爲SqlDbType.DateTime類型。然而,有人非常聰明地將它們定義爲我在開始時忽略的VARCHAR(10)

不幸的是,這並沒有導致錯誤信息,只是在返回的空結果集中。只要我改變參數類型,我得到了我的預期結果。

希望這可能對別人有幫助。

G.