导航

C# 執行效率(一):讀取excle中的vendor并check和上傳

Posted on 2010-02-26 09:14  杨彬Allen  阅读(196)  评论(0)    收藏  举报

舊的算法:

for(int i=0;i<dtVendor.rows.count;i++)

{

       sql = "select count(1) from tb_vendor where vendor='"+dtVendor.Rows[i][0].ToString()+"'";

       if(check(sql)>0)

            sql2 = "insert into ……";

}

當dtVendor的資料有幾百筆的時候,速度就非常慢了。。。這個算法很糟糕。。。。以後切忌不可如此使用。

 

 

新的算法:

StringBuilder sb= new StringBuilder();

sb.Append(" create table #temp1(……)");

sb.Append(" insert into #temp1");

sb.Append(" select '" + dtVendor.Rows[0][0].ToString() + "'\n");

for (int i = 1; i < dtVendor.Rows.Count; i++)
{
       if (!string.IsNullOrEmpty(dtVendor.Rows[i][0].ToString()))
       {
            sb.Append(" union select '" + dtVendor.Rows[1][0].ToString() + "'\n");
        }
}
sb.Append(" ;");

sb.Append(" select A.vendor from #temp1 A inner join tb_vendor B on A.vendor = B.vendor");

這樣就可以去掉上百個 " select count(1)".

另外insert也可以用拼sql的方法,這樣又可以省掉上百個" insert into".