连接SQLSERVER数据库效率分析

发布时间 2023-07-28 16:21:42作者: Joooannes

如果把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]处理大批数据的效率不是很好。