2016-11-01 37 views
1

存儲過程返回多個列並填充ds獲得更多時間。數據集獲取更多時間填充數據

SQL += "exec EquityDealerMapping_TestDJ"; 
SQL += " @status_id = '" + StrStatusID + "'"; 
SQL += ", @status_name = '" + StrStatusName + "'"; 

SqlCommand Cmd = new SqlCommand(SQL, Con); 
SqlDataAdapter Da = new SqlDataAdapter(Cmd); 
Cmd.CommandTimeout = 6000; 
Da.Fill(_ds); 

存儲過程的代碼:

select 
    ROW_NUMBER() OVER(ORDER BY Client_code) AS 'SrNo', 
    Client_code, Client_name, 
    Branch_cd, Trading_Mode, 
    Dealer_code_Existing, Dealer_code_New, 
    ColorCode 
from 
    @mytable 
order by 
    Client_code 
+0

你得到的實際錯誤是什麼? –

+0

顯示完整的代碼,你是否處理DataAdapter,你的連接。你分享一個SQL連接? – mybirthname

+0

不顯示任何錯誤。 da.fill(ds)中的錯誤需要更多時間來填充。 –

回答

0

好,得到更多時間的方式是設置的CommandTimeout,因爲你在做什麼。也許問題在別的地方?

你可以嘗試檢查連接狀態:

if (cmd.Connection.State == ConnectionState.Broken 
     || cmd.Connection.State == ConnectionState.Closed) 
{ 
    cmd.Connection.Open(); 
} 

另一種方法來處理返回大量的數據是一次處理一個行而不是加載所有到一個數據集或數據表第一的查詢。

DataTable dt = new DataTable(); 
SqlDataReader reader = cmd.ExecuteReader(); 
foreach (DataRow dr in reader.GetSchemaTable().Rows) 
{ 
    /*this was originally written to handle an arbitrary query, which means 
     we might end up with multiple columns with the same name, which isn't allowed. 
     use extrachars and n to make names like "ID1", "ID2", etc... */ 
    string colName = dr["ColumnName"].ToString(); 
    string extrachars = ""; 
    int n = 1; 
    while (dt.Columns.Contains(colName + extrachars)) 
    { 
     extrachars = n.ToString(); 
     n++; 
    } 

    dt.Columns.Add(colName + extrachars, Type.GetType(dr["DataType"].ToString())); 
} 

while (reader.Read()) 
{ 
    DataRow dr = dt.NewRow(); 
    object[] tempArray = new object[dt.Columns.Count]; 
    reader.GetValues(tempArray); 
    dr.ItemArray = tempArray; 

    //either add it to a table 
    dt.Rows.Add(dr); 

    //or call a function with it 
    //SomeFunc(dr); 
}