Access數(shù)據(jù)庫多條數(shù)據(jù)Insert_Access數(shù)據(jù)庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:Access 2010數(shù)據(jù)庫加密介紹
      使用數(shù)據(jù)庫密碼加密 Access 數(shù)據(jù)庫 Access 中的加密工具合并了兩個舊工具(編碼和數(shù)據(jù)庫密碼),并加以改進。使用數(shù)據(jù)庫密碼來加密數(shù)據(jù)庫時,所有其他工具都無法讀取數(shù)據(jù),并強制用戶必須輸入密碼才能使用數(shù)據(jù)庫。在 Access 2010 中應用的加密所使用的算法比早期版本的 A

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

            由于在此之前我沒有用過Access數(shù)據(jù)庫的,當需要想數(shù)據(jù)庫中插入多條數(shù)據(jù)時,我們不妨先按照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下就會出現(xiàn)這樣的錯誤: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數(shù)據(jù),由于sql本事對xml的支持 ,可以用sql基于xml的查詢,本文主要討論Access,此處暫不討論了!嘗試二宣布失敗!。接下來我又想到了零時表,Access是不是也支持零時表的查詢呢?

      嘗試三

      The Demo: 取出我想要的數(shù)據(jù)格式 (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);
              }

      分享:Access數(shù)據(jù)庫安全策略之ASP式
      這種作法是比較專業(yè)但也是很安全的也是現(xiàn)在比較流行的作法,但是現(xiàn)在許多的人只是作了一半,只是將數(shù)據(jù)名改成ASP而以,這樣的話直接用FlashGet之類的下載工具一樣可以將數(shù)據(jù)庫下載,這種方式的正確作法有兩步: 第一步:在數(shù)據(jù)庫內(nèi)創(chuàng)建一個字段,名稱隨意,類型是OLE對

      共2頁上一頁12下一頁
      來源:模板無憂//所屬分類:Access數(shù)據(jù)庫教程/更新時間:2014-10-10
      相關Access數(shù)據(jù)庫教程