2016-11-01 12 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、あなたの接続を処分しましたか? 1つのSQL接続を共有しますか? – mybirthname

+0

にはエラーはありません。 da.fill(ds)でエラーが発生すると、処理に時間がかかります。 –

答えて

0

まあ、より多くの時間を取得する方法は、あなたがやっているように、CommandTimeoutのを設定することです。おそらく問題はどこか他の場所ですか?

あなたは、接続状態をチェックしてみてください可能性:大量のデータを返すクエリを処理するための別のアプローチではなく、データセットまたはDataTableを最初にそれをすべてロード時に行を処理することである

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); 
} 
関連する問題