连接SQLSERVER数据库效率分析
如果把sqlserver数据库比作一间屋子,可以分为三个层次:
1、找到这间屋子——实例未找到
2、找到屋子并打开门——sqlconnection
3、进屋之后,能够做饭——sqlcommand
这三种情况,最难处理的即是第一种情况,下面贴出来一段代码,作为参考:
public static DataTable cmdDbFillDt(string conn, string sql)
{
bool connectFlag = false;
DataTable dataTable = new DataTable();
Stopwatch sw = new Stopwatch();
Thread t = new Thread(delegate ()
{
try
{
using (SqlConnection sqlconn = new SqlConnection(conn))
{
sw.Start();
try
{
if (sqlconn.State == ConnectionState.Open)
{
sqlconn.Close();
}
sqlconn.Open();
connectFlag = true;
SqlCommand cmd = new SqlCommand(sql, sqlconn);
cmd.CommandTimeout = 60000;
SqlDataReader sqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
dataTable.Load(sqlDataReader);
}
catch (Exception ex)
{
LogHelper.writeLog(ex.Message.ToString() + ex.StackTrace.ToString(), ex);
}
}
}
catch (Exception ex)
{
LogHelper.writeLog(ex.Message.ToString() + ex.StackTrace.ToString(), ex);
}
});
t.IsBackground = true;
t.Start();
var timeout = TimeSpan.FromSeconds(3);
while (!connectFlag && sw.Elapsed < timeout)
t.Join(TimeSpan.FromMilliseconds(200));
sw.Stop();
return dataTable;
}
中间使用了[sqldatareader], 为什么没有选择用[sqldataadapter]。因为[sqldataadapter]处理大批数据的效率不是很好。