2013-03-12 61 views
0

我已經創建了從數據庫獲取數據的方法。此方法具有DataTable作爲返回類型。當試圖調用這個方法時,它會拋出一個對象引用的異常,而不會設置對象的一個​​實例。這裏是方法和我如何使用它。無法獲取Datatable返回類型到對象

public DataTable executeSelect (String _query, SqlParameter[] sqlParameter) 
    { 
     SqlCommand myCommand = new SqlCommand(); 
     DataTable dataTable = new DataTable(); 
     dataTable = null; 
     DataSet ds = new DataSet(); 
     try 
     { 
      myCommand.Connection = openConnection(); 
      myCommand.CommandText = _query; 
      myCommand.Parameters.AddRange(sqlParameter); 
      myCommand.ExecuteNonQuery(); 
      myadapter.SelectCommand = myCommand; 
      myadapter.Fill(ds); 
      dataTable = ds.Tables[0]; 
     } 
     catch (SqlException e) 
     { 
      Console.Write(e.StackTrace.ToString()); 

      return null; 
     } 
     finally 
     { 

     } 
     return dataTable; 
    } 

下面的代碼顯示方法如何通過上述被用來導致成一個DataTable

  string sp_name = "sLot"; 
      SqlParameter[] param = new SqlParameter[]{ 
       new SqlParameter("@stype","ML"), 
       new SqlParameter("@ttype","B"), 
       new SqlParameter("@code",comp_code) 

      };    

      DataTable data = dbc.executeSelect(sp_name, param); 

注:我假設你得到一個excdeption它使用存儲過程的名稱「老虎」

+0

最後一行出現錯誤,例如DataTable data = dbc.executeSelect(sp_name,param); – suds 2013-03-12 19:01:41

回答

1

,因此您返回null而不是DataTable。如果您使用一個,則必須將CommandType設置爲StoredProcedure

myCommand.CommandType = CommandType.StoredProcedure; 

當然也有一個NullReferenceException其他可能的原因,但你有沒有提供了足夠的信息。如果最後一行引發異常,則註釋dbc爲空。您可以使executeSelect爲靜態或創建聲明方法的類型的實例。

+0

在進入executeSelect方法之前拋出錯誤,即這裏DataTable data = dbc.executeSelect(sp_name,param); – suds 2013-03-12 19:06:50

+0

@SDKLive:我編輯了我的答案。 – 2013-03-12 19:07:34

+0

你說得對,我忘記用新關鍵字來聲明dbc,因爲我在印象中認爲它是一種靜態方法。謝謝蒂姆。 – suds 2013-03-12 19:16:39