循环执行数据集操作时,如何提高速度?
请教各位高手,利用C#读固定格式文件中的数据,并将结果存储到数据库中,需要将文件中的每行数据分别存成数据库中的一条记录,在循环中实现数据库操作,代码如下:SqlConnection mySqlConnection=new SqlConnection (sqlstr);
DataSet dataset=new DataSet ();
SqlDataAdapter sda=new SqlDataAdapter();
for(int i=0;i<60;i++)
{
sql="update database set tem1='"tt"'"
sda=new SqlDataAdapter(sql,mySqlConnection)
sda.Fill(dataset,"database ");
}
这样执行起来速度很慢,请教如何更新才能提高速度,谢谢! --------------------编程问答-------------------- 你的for循环的i没用到啊
你把所有的数据先放入dataset,然后执行一次查询就可以了 --------------------编程问答-------------------- 静等高手,我这几天也在头疼这个事情,大爷的,EDI850文档,让存到数据库 --------------------编程问答-------------------- 放到一个块处理 分号隔开 --------------------编程问答-------------------- update .....
update .....
string sql = "update....."
sql += " update...."
可以直接写在一起。回车或者空格分隔就行。避免了打开和关闭数据库等一些操作。 --------------------编程问答-------------------- 可以考虑使用批量更新的方法,自己google,关键字是:C# 批量更新 --------------------编程问答-------------------- --------------------编程问答-------------------- 楼主你这样做肯定慢了,因为Fill方法在开始调用之前会打开一次连接,调用之后会关闭该连接,下次调用时再次打开。就好像你给你女朋友打电话,说完一句话就挂机,然后重拨,这样速度肯定不行喽。所以你应该一次性将要进行的数据库操纵命令构造好,然后再才开始执行
--------------------编程问答-------------------- builder.Append("update database set tem1='"tt"'; ");//在最后加上分号
StringBuilder builder = new StringBuilder();
for(int i=0;i<60;i++)
{
builder.Append("update database set tem1='"tt"'");
}
builder.Append("go");
using(SqlConnection mySqlConnection=new SqlConnection (sqlstr))
{
SqlCommand cmd = new SqlCommand(builder.ToString(), mySqlConnection);
mySqlConnection.Open();
cmd.ExecuteNonQuery();
}
--------------------编程问答-------------------- 建议不用dataset和sqldataadapter,改用IList<T>和sqldatareader效率会更好~ --------------------编程问答-------------------- //将SqlDataReader 数据集转化为datatbale ,在将datatable 转化为iList
public IList GetModelList(string tablename, string where)
{
IList list = null;
DataTable dataTable = new DataTable();
string sql = "select * from " + tablename;
if (where != "")
{
sql += " Where " + where;
}
try
{
System.Data.SqlClient.SqlDataReader dr = DbHelperSQL.ExcuteReader(sql);
for (int i = 0; i < dr.FieldCount; i++)
{
DataColumn mydc = new DataColumn(); //关键的一步
mydc.DataType = dr.GetFieldType(i);
mydc.ColumnName = dr.GetName(i);
dataTable.Columns.Add(mydc); //关键的第二步
}
while (dr.Read())
{
DataRow mydr = dataTable.NewRow(); //关键的第三步
for (int i = 0; i < dr.FieldCount; i++)
{
mydr[i] = dr[i].ToString();
}
dataTable.Rows.Add(mydr); //关键的第四步
mydr = null;
}
dr.Close();
list = dataTable as IList;
return (list);
}
catch (Exception ex)
{
throw ex;
}
}
补充:.NET技术 , C#