• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 辦公軟件教程 > 詳細頁面

        Access數據庫多條數據Insert

        Access數據庫多條數據Insert

        更新時間:2022-05-07 文章作者:未知 信息來源:網絡 閱讀次數:

        Microsoft Office Access是由微軟發布的關系數據庫管理系統。它結合了 MicrosoftJet Database Engine 和 圖形用戶界面兩項特點,是 Microsoft Office 的系統程序之一。Microsoft Office Access是微軟把數據庫引擎的圖形用戶界面和軟件開發工具結合在一起的一個數據庫管理系統。它是微軟OFFICE的一個成員, 在包括專業版和更高版本的office版本里面被單獨出售。2018年9月25日,最新的微軟Office Access 2019在微軟Office 2019里發布。

        當下Access數據庫可能要被遺忘了!比較這個輕量級數據庫被精簡了許多功能,個人感覺用起來還是挺麻煩的!當前Access在企業項目中就是一塊雞肋。數據量小使用SQL Server是浪費,既然選擇了Access就別抱怨了!如果用好了還是一塊寶!廢話不多說了,今天就來探討下如何向Access中插入多條數據把!

              由于在此之前我沒有用過Access數據庫的,當需要想數據庫中插入多條數據時,我們不妨先按照sql server的做法:“insert into tablename(column1,column2) values (a,b),(c,d),(e,f)”。于是按照這個思路,我的第一個方案出來了。

        嘗試一:

        The Demo:

        StringBuilder BuiList = new StringBuilder(string.Format("({0},0)", UserID));
                    foreach (RepeaterItem item in Rpt_AdminRole.Items)
                    {
                        if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
                        {
                            HtmlInputCheckBox cbRole = item.FindControl("cb_Role") as HtmlInputCheckBox;
                            if (cbRole.Checked)
                            {
                                BuiList.Append(",(");
                                BuiList.Append(UserID);
                                BuiList.Append(",");
                                BuiList.Append(cbRole.Value);
                                BuiList.Append(")");
                            }
                        }
                    }

        The Dal:

                /// <summary>
                /// 添加Role關系
                /// </summary>
                /// <param name="roleContact">角色關系 eg: "(1,1),(1,2)"</param>
                /// <returns></returns>
                public static int InsertRoleContact(string roleContact)
                {
                    string sql = "insert into Sky_Admin_Role(AdminID,RoleID) values "+roleContact;
                    return Common.OleDbHelper.ExecuteNonQuery(CommandType.Text, sql, null);
                }

        exec下就會出現這樣的錯誤:SQL 語句的結束位置缺少分號 (;)。

              Access對sql的支持果然是大大精簡,到此嘗試一失敗!, 很快在我有另外idea。sql server 多表查詢對select table 的支持!我可以直接傳一個DataTable到sql語句中,說干就干! 

        嘗試二

        The Demo : 獲取DataTable

                public DataTable GetInsertSQL(Repeater rep,string controlID)
                {
                    DataTable data = new DataTable();
                    data.Columns.Add("AdminID");
                    data.Columns.Add("RoleID");
                    foreach (RepeaterItem item in rep.Items)
                    {
                        if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
                        {
                            HtmlInputCheckBox cb = item.FindControl(controlID) as HtmlInputCheckBox;
                            if (cb.Checked)
                            {
                                DataRow row = data.NewRow();
                                row.ItemArray = new object[] { UserID, cb.Value};
                                data.Rows.Add(row);
                            }
                        }
                    }
                    return data;
                }

        The Dal:

        public static int InsertRoleContact(DataTable dt)
                {
                    string sql = "insert into Sky_Admin_Role(AdminID,RoleID) select * from @Data";
                    OleDbParameter[] param = new OleDbParameter[] { 
                    new OleDbParameter("@Data",?){Value =dt}
                    };
                    return Common.OleDbHelper.ExecuteNonQuery(CommandType.Text, sql, param);
                }

             當代碼到這里我就知道此方法行不通,因為OledbType中沒有對應的table類型,如果是SQL server由于支持xml可以設置為 SqlDbType.Xml類型來傳遞DataTable數據,由于sql本事對xml的支持 ,可以用sql基于xml的查詢,本文主要討論Access,此處暫不討論了!嘗試二宣布失敗!。接下來我又想到了零時表,Access是不是也支持零時表的查詢呢?

        嘗試三

        The Demo: 取出我想要的數據格式 (1,2,3)

                public string GetInserCollection(Repeater rep, string controlID)
                {
                    StringBuilder buiCollecton = new StringBuilder("");
                    buiCollecton.Append("(0");
                    foreach (RepeaterItem item in rep.Items)
                    {
                        if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
                        {
                            HtmlInputCheckBox cb = item.FindControl(controlID) as HtmlInputCheckBox;
                            if (cb.Checked)
                            {
                                buiCollecton.Append(string.Format(",{0}", cb.Value));
                            }
                        }
                    }
                    buiCollecton.Append(")");
                    return buiCollecton.ToString();
                }


        The Dal :

        public static int InsertRoleContact(int UserID,string RoleCollection)
                {
                    StringBuilder BuiSQL = new StringBuilder("");
                    BuiSQL.Append("declare @SkyContact table(userID int,roleID int);");
                    BuiSQL.Append("insert into @SkyContact values select " + UserID + ",R_ID from Sky_Role;");
                    BuiSQL.Append(string.Format("insert into Sky_Admin_Role values (select * from @SkyContact where roleID in {0})",RoleCollection));
                    return Common.OleDbHelper.ExecuteNonQuery(CommandType.Text, BuiSQL.ToString(), null);
                }

              這里模仿SQL Server中定義一個零時表,然后向其中插入盡可能全的數據,然后在基于零時表查詢出想要的數據放入到我想要的數據中執行!exec下結果又出問錯了!此處拋出這樣的錯誤:無效的 SQL語句;期待 'DELETE'、'INSERT'、'PROCEDURE'、'SELECT'、或 'UPDATE'。其實會出錯完全可以想想的到,畢竟Access中連insert into table values (1,2),(1,3) 這樣的語句都不支持。此時嘗試三也不得不宣告失敗!嘗試了這么多,我不得不使用早就準備用的方法 多條insert一起執行。

        嘗試四

        The Demo: 先獲取我想要的數據形式 :1,2,3 此處略。看sql:

        public static int InsertRoleContact2(int UserID, string RoleCollection)
                {
                    string[] arr = RoleCollection.Split(',');
                    StringBuilder BuilSQL = new StringBuilder("");
                    foreach (string item in arr)
                    {
                        BuilSQL.Append(
        string.Format("insert into Sky_Admin_Role(AdminID,RoleID) values ({0},{1});",UserID,Convert.ToInt32(item)));
                    }
                    return Common.OleDbHelper.ExecuteNonQuery(CommandType.Text, BuilSQL.ToString(), null);
                }

              執行下結果打出我的意外:在 SQL 語句結尾之后找到字符。 竟然連這種語句都不支持,沒相當Access會對數據支持的這么少。既然這樣也不行,難道只有循環執行每一天SQL語句嗎?我看可行!循環是必要的,只要不多次連接數據庫,也不會占用太多資源的,此時引出了我的本文的重點,如何向Access中插入多條記錄。

        嘗試五

        The Demo:

         public static void InsertMultipleSQL(int UserID,string RoleCollection)
                {
                    string[] arr = RoleCollection.Split(',');
                    using (OleDbConnection conn = new OleDbConnection(Common.config.AccessConnStr))
                    {
                        OleDbCommand cmd = conn.CreateCommand();
                        OleDbTransaction trans = null;
                        try
                        {
                            conn.Open();
                            trans = conn.BeginTransaction();
                            cmd.Transaction = trans;
                            foreach (string item in arr)
                            {
                                cmd.CommandText =
         string.Format(
        string.Format(
        "insert into Sky_Admin_Role(AdminID,RoleID
        ) values ({0},{1});", UserID, Convert.ToInt32(item)));
                                cmd.ExecuteNonQuery();
                            }
                            trans.Commit();
        
                        }
                        catch (Exception ex)
                        {
                            trans.Rollback();
                            throw ex;
                        }
                    }
                }

             注意當插入多條語句時我們不要忘了一旦發生異常,我們需要撤銷操作,就必須要用到事務。執行Aceess的insert時,我們需要在connection關閉前循環插入,這樣才能減少資源暫用,提升性能。這里宣告嘗試五成功!


        Microsoft Access在很多地方得到廣泛使用,例如小型企業,大公司的部門。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 青青草97国产精品免费观看| 精品亚洲成A人无码成A在线观看 | 国产在亚洲线视频观看| 欧美好看的免费电影在线观看| 亚洲av午夜国产精品无码中文字 | 亚洲激情在线观看| 国产午夜精品久久久久免费视| 亚洲欧洲精品无码AV| a级片免费在线播放| 久久亚洲精品中文字幕无码| 久章草在线精品视频免费观看| 亚洲国产精品久久久久| 蜜桃视频在线观看免费视频网站WWW| 久久丫精品国产亚洲av| 4444www免费看| 亚洲依依成人亚洲社区| 免费看无码自慰一区二区| 国产AV无码专区亚洲AV麻豆丫| 久久精品乱子伦免费| 久久精品九九亚洲精品| 色影音免费色资源| 亚洲AV成人无码久久精品老人| 51精品视频免费国产专区| 在线观看亚洲AV日韩A∨| 亚洲高清成人一区二区三区| 国产免费无码AV片在线观看不卡| 亚洲最大黄色网址| 国产成人3p视频免费观看| 一级一片免费视频播放| 亚洲综合无码一区二区| 国产裸模视频免费区无码| 国产一级高青免费| 亚洲免费电影网站| 午夜福利不卡片在线播放免费| 亚洲成人激情小说| 福利免费观看午夜体检区| 另类专区另类专区亚洲| 亚洲av成人无码久久精品| 日本xxwwxxww在线视频免费| 美女被cao网站免费看在线看| 日韩亚洲人成在线|