当前位置: 代码迷 >> C# >> 生手2个月,每次操作数据库都是using(sqlconnection)
  详细解决方案

生手2个月,每次操作数据库都是using(sqlconnection)

热度:375   发布时间:2016-04-28 08:42:22.0
新手2个月,每次操作数据库都是using(sqlconnection)
using{sqlconnection conn=new ..}
每次操作数据库查询更新都是这么做的,如果要更新五张表,我就五次using操作,这种做法是不是不好啊,看过一些别人的代码,用的一些dll之类的,我改怎么改进呢
------解决思路----------------------
更新5张表可以 放到一起操作,只连接一次db。
------解决思路----------------------
用List<ClassUserType.Parameter[]>把要更新的数据表都打包过去,using(连接)一次后 循环遍历,或者直接用存储过程。
------解决思路----------------------
那你干嘛不把这个方法写为公共方法呢?
------解决思路----------------------
如果性能受影响,那就需要把库连接方式做点优化,
连接一次,完成相关操作,
频繁的连接、断开效率不高

------解决思路----------------------
引用:
哦哦,我优化一下。还有我想知道大家操作数据库都是用的什么方式,引用dll
 int number = DbHelperSQL.ExecuteSql("delete“) 还是这种using().


 public static int ExecuteDataSet(CommandType cmdType, string cmdText, params ClassUserType.Parameter[] parameters)
        {
            int sum = 0;
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                con.Open();
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
                using (SqlCommand cmd = new SqlCommand())
                {
                    PrepareCommand(con, cmd, cmdType, cmdText, ChangeToSqlPara(parameters));
                    sum = cmd.ExecuteNonQuery();
                    return sum;
                }
            }
        }
        public static void PrepareCommand(SqlConnection con, SqlCommand cmd, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
        {
            if (con.State != ConnectionState.Open)
                con.Open();
            cmd.Connection = con;
            cmd.CommandType = cmdType;
            cmd.CommandText = cmdText;
            if (cmdParms == null)
                return;
            foreach (SqlParameter sqlParameter in cmdParms)
            {
                if (sqlParameter != null)
                {
                    if (sqlParameter.Direction == ParameterDirection.InputOutput 
------解决思路----------------------
 sqlParameter.Value == null)
                        sqlParameter.Value = (object)DBNull.Value;
                    cmd.Parameters.Add(sqlParameter);
                }
            }
        }
给你贴个吧,用的是存储过程,插入,写的不好请见谅。。
------解决思路----------------------
引用:
Quote: 引用:

哦哦,我优化一下。还有我想知道大家操作数据库都是用的什么方式,引用dll
 int number = DbHelperSQL.ExecuteSql("delete“) 还是这种using().


 public static int ExecuteDataSet(CommandType cmdType, string cmdText, params ClassUserType.Parameter[] parameters)
        {
            int sum = 0;
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                con.Open();
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
                using (SqlCommand cmd = new SqlCommand())
                {
                    PrepareCommand(con, cmd, cmdType, cmdText, ChangeToSqlPara(parameters));
                    sum = cmd.ExecuteNonQuery();
                    return sum;
                }
            }
        }
        public static void PrepareCommand(SqlConnection con, SqlCommand cmd, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
        {
            if (con.State != ConnectionState.Open)
                con.Open();
            cmd.Connection = con;
            cmd.CommandType = cmdType;
            cmd.CommandText = cmdText;
            if (cmdParms == null)
                return;
            foreach (SqlParameter sqlParameter in cmdParms)
            {
                if (sqlParameter != null)
                {
                    if (sqlParameter.Direction == ParameterDirection.InputOutput 
------解决思路----------------------
 sqlParameter.Value == null)
                        sqlParameter.Value = (object)DBNull.Value;
                    cmd.Parameters.Add(sqlParameter);
                }
            }
        }
给你贴个吧,用的是存储过程,插入,写的不好请见谅。。


可以看看这个http://blog.csdn.net/fengqingtao2008/article/details/17399247
------解决思路----------------------
 C#.NET万能数据库访问封装类(ACCESS、SQLServer、Oracle)
http://blog.csdn.net/jiankunking/article/details/17992817
------解决思路----------------------
楼主,我建议你先优化自己现在的数据库查询方法,等熟练了之后在用助手类(你说的dll)来操作数据库,先把基础给打牢,这有好处的。
你的using{sqlconnection conn=new ..}的使用方式,在一个查询过程当中只需用一次就行,另外ado.net可以多条查询语句一并执行的,这些基础的技巧练好了,以后再去用助手类,你甚至到时候可以自己给自己写个助手类,你现在拿别人的用,也弄不清到底人家是怎么写的。