C#通过哈希表批量上传数据

DAL层方法

  /// <summary> 
        ///为执行命令做参数准备     
        ///</summary>       
        ///<param >SqlCommand object</param>   
        ///<param >SqlConnection object</param>       
        ///<param >SqlTransaction object</param>       
        ///<param >一个存储过程,或者sql语句类型</param>     
        ///<param >一个命令sql语句</param>        
        ///<param >参数集合</param>       
        public static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, SQLiteTransaction trans, CommandType cmdType, string cmdText, SQLiteParameter[] cmdParms)
        {
            try
            {
                //判断连接的状态。如果是关闭状态,则打开                
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                //cmd属性赋值                
                cmd.Connection = conn;
                cmd.CommandText = cmdText;                //是否需要用到事务处理      
                if (trans != null)
                    cmd.Transaction = trans;
                cmd.CommandType = cmdType;                //添加cmd需要的存储过程参数   
                if (cmdParms != null)
                {
                    foreach (SQLiteParameter parm in cmdParms)
                        cmd.Parameters.Add(parm);
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }

BLL层方法

        /// <summary>        
        /// 执行多条SQL语句,实现数据库事务。        
        /// </summary>        
        /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SQLiteParameter[])</param>        
        public static void ExecuteSqlTran(Hashtable SQLStringList, ConnectionType type)
        {
            SQLiteConnection conn = GetConnection(type);
            if (conn.State == ConnectionState.Closed)
                conn.Open();
            using (SQLiteWriteLock sqliteLock = new SQLiteWriteLock(connString))
            {
                using (SQLiteTransaction trans = conn.BeginTransaction())
                {
                    SQLiteCommand cmd = new SQLiteCommand();
                    try
                    {
                        bool hadExce = false;
                        //循环                    
                        foreach (DictionaryEntry myDE in SQLStringList)
                        {
                            string cmdText = myDE.Key.ToString();
                            SQLiteParameter[] cmdParms = (SQLiteParameter[])myDE.Value;
                            PrepareCommand(cmd, conn, trans, CommandType.Text, cmdText, cmdParms);
                            int val = cmd.ExecuteNonQuery();
                            cmd.Parameters.Clear();
                            hadExce = true;
                        }
                        if (hadExce)
                        {
                            trans.Commit();
                        }

                    }
                    catch (System.Data.SQLite.SQLiteException e)
                    {
                        trans.Rollback();
                        conn.Close();
                        throw new Exception(e.Message);
                    }
                }
            }
        }

UI层

 Hashtable hashtb = new Hashtable();
                    for (int i = 0; i < dtOrderDetail.Rows.Count; i++)
                    {
                        string prodcode = dtOrderDetail.Rows[i]["?"].ToString();
                        string colorcode = dtOrderDetail.Rows[i]["?"].ToString();
                        string pattern = dtOrderDetail.Rows[i]["?"].ToString();
                        DateTime WNo = (DateTime)dtOrderDetail.Rows[i]["?"];
                        SQLiteParameter[] parameters = {
                            new SQLiteParameter("@?", DbType.String),
                            new SQLiteParameter("@?", DbType.String),
                            new SQLiteParameter("@?", DbType.String),
                            new SQLiteParameter("@?", DbType.DateTime)};
                        parameters[0].Value = ?;
                        parameters[1].Value = ?;
                        parameters[2].Value = ?;
                        parameters[3].Value = ?;
                        hashtb.Add("update OrderDetail set ? where ? and ? and ?and ? and ?and " + i + "=" + i, parameters);
                    }
SqliteClass.ExecuteSqlTran(hashtb, SqliteClass.ConnectionType.Biz);
原文地址:https://www.cnblogs.com/tryzi/p/2563233.html