去出差的時候應客戶要求要要將Excel 文件內的數據批量導入到數據庫中,而且有各種不同種類的表格,如果每一個表格多對應一個數據表的話,
按照正常的方法應該是創建數據表,創建數據庫中映射的數據模型,然后數據訪問層,業務層,在為每個表創建一個展示頁面......這樣一套下來花費
的時間多不說在以后客戶又有新的表格需要導入那么是不是也要按照三層的步驟一步一步的來做呢?答案是否定的。這里我向大家介紹一個比較靈活
方式來完成所有的功能,在拓展性上也很好,可以移植到任何程序中使用:
不多廢話直接看程序,程序是最好的解釋:
本程序是通過XML 來保存數據庫字段和需要在界面上顯示的表頭
首先在網站的根目錄下創建一個XML 文件來保存動態生成的數據表以及每一列和表頭對應的中文名:
<?xml version="1.0" encoding="utf-8"?> <DBTable> <table> <CName>任職資格台賬</CName> <EName>rzzgtz</EName> <Identity>R_Id</Identity> <columns> <eColumn eName="xuhao" eType="nvarchar(MAX)" cName="序號" eLength="varchar(10)" /> <eColumn eName="Ztype" eType="nvarchar(MAX)" cName="證書類別" eLength="varchar(10)" /> <eColumn eName="bM" eType="nvarchar(MAX)" cName="部門" eLength="varchar(10)" /> <eColumn eName="Name" eType="nvarchar(MAX)" cName="姓名" eLength="varchar(10)" /> <eColumn eName="Gender" eType="nvarchar(MAX)" cName="性別" eLength="varchar(10)" /> <eColumn eName="CID" eType="nvarchar(MAX)" cName="省份證號" eLength="varchar(10)" /> <eColumn eName="tTemp" eType="nvarchar(MAX)" cName="文化程度" eLength="varchar(10)" /> <eColumn eName="ziwu" eType="nvarchar(MAX)" cName="職務/職稱" eLength="varchar(10)" /> <eColumn eName="fzjg" eType="nvarchar(MAX)" cName="發證機關" eLength="varchar(10)" /> <eColumn eName="XCID" eType="nvarchar(MAX)" cName="證書編號" eLength="varchar(10)" /> <eColumn eName="Qtime" eType="nvarchar(MAX)" cName="取證時間" eLength="varchar(10)" /> <eColumn eName="fTime" eType="nvarchar(MAX)" cName="復審時間" eLength="varchar(10)" /> <eColumn eName="Other" eType="nvarchar(MAX)" cName="備注" eLength="varchar(10)" /> </columns> </table> <DBTable>
DBTable 節點是根節點 內部的table 保存的是數據表中的相關屬性。
節點 <CName></CName>保存的是中文名稱,也是菜單名稱。
節點<EName></EName>保存的是名稱和數據表中的表明一一對應。
節點 <Identity></Identity>保存的是表的主鍵名稱。
節點<columns> </columns> 保存的是數據表中對應的數據列屬性
內部節點 <eColumn eName="xuhao" eType="nvarchar(MAX)" cName="序號" eLength="varchar(10)" />
屬性:eName [數據庫中名稱],eType[數據類型] cName [表頭名稱] eLength 可有可無的一個屬性
以上是XML 表結構的一些說明;
下面需要一個類來專門操作XML對節點的一些操作和檢索
/** *張國強 2014-02-19 15:06 *XML文件的讀寫方法 *編寫目的:將中文表名和數據中的表名進行綁定 */ using System; using System.Collections.Generic; using System.Linq; using System.Text; // using System.Xml; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Configuration; namespace CommonLib { public class XMLBase : Page { //聲明一個XMLDom對象 XmlDocument xmlDoc = null; XmlNode root = null; /// <summary> /// 文件地址 /// </summary> string xmlPath = ConfigurationManager.ConnectionStrings["XMLPath"].ConnectionString; /// <summary> /// 第一步加載xml文件 /// </summary> public void LoadDome() { xmlDoc = new XmlDocument(); string path = Server.MapPath(xmlPath);//轉換為物理路徑 xmlDoc.Load(path);//加載文件 root = xmlDoc.SelectSingleNode("DBTable"); } /// <summary> /// 向XML中添加一個節點 /// </summary> /// <param name="cName">中文名稱</param> /// <param name="eName">對應的數據表名稱</param> public void InsertNode(string cName, string eName, string id) { XmlElement table = xmlDoc.CreateElement("table"); //添加中文名 XmlElement c_Name = xmlDoc.CreateElement("CName"); c_Name.InnerText = cName; table.AppendChild(c_Name); //添加英文名 XmlElement e_Name = xmlDoc.CreateElement("EName"); e_Name.InnerText = eName; table.AppendChild(e_Name); //添加主鍵 XmlElement iditent = xmlDoc.CreateElement("Identity"); iditent.InnerText = id; table.AppendChild(iditent); root.AppendChild(table); string path = Server.MapPath(xmlPath);//轉換為物理路徑 xmlDoc.Save(path);//將添加的數據保存到文件中 } /// <summary> /// 向子節點中添加列名數據 /// </summary> /// <param name="cTable">中文名稱表明</param> /// <param name="eTableName">英文名稱表明</param> /// <param name="eName">列名英文名</param> /// <param name="eType">數據類型</param> /// <param name="cName">列名中文名</param> /// <param name="eLenght">數據長度</param> public void InsertNode(string cTable, string eTableName, string eName, string eType, string cName, string eLenght) { //找到父節點名 XmlNode fatherNode = xmlDoc.SelectSingleNode("DBTable"); XmlNode nodeRoot = null; for (int i = 0; i < fatherNode.ChildNodes.Count; i++) { nodeRoot = fatherNode.ChildNodes[i]; var c_Name = nodeRoot.ChildNodes[0].InnerText; var e_Name = nodeRoot.ChildNodes[1].InnerText; if (cName == c_Name && e_Name == eName) { break; } } //想父節點添加數據 var se = (nodeRoot as XmlNode).SelectSingleNode("columns"); XmlElement columns = null; if (se == null) { columns = xmlDoc.CreateElement("columns"); } else { columns = (se as XmlElement); } XmlElement eColumn = xmlDoc.CreateElement("eColumn"); eColumn.SetAttribute("eName", eName); eColumn.SetAttribute("eType", eType); eColumn.SetAttribute("cName", cName); eColumn.SetAttribute("eLength", eLenght); columns.AppendChild(eColumn); nodeRoot.AppendChild(columns); string path = Server.MapPath(xmlPath);//轉換為物理路徑 xmlDoc.Save(path);//將添加的數據保存到文件中 } /// <summary> /// 檢查節點綁定時候有重復的內容 /// </summary> /// <param name="cName">中文名稱</param> /// <param name="eName">對應的數據表名稱</param> /// <returns>存在返回false 不存在返回true</returns> public bool CheckNode(string cName, string eName) { bool resout = true; XmlNode nodeRoot = xmlDoc.SelectSingleNode("DBTable");//找到根節點 for (int i = 0; i < nodeRoot.ChildNodes.Count; i++) { var tab = nodeRoot.ChildNodes[i]; var c_Name = tab.ChildNodes[0].InnerText; var e_Name = tab.ChildNodes[1].InnerText; if (cName == c_Name || e_Name == eName) { resout = false; } } return resout; } /// <summary> /// 刪除節點 /// </summary> /// <param name="cName"></param> /// <param name="eName"></param> /// <param name="res"></param> public void DeleteNode(string cName, string eName, bool res) { XmlNode node = GetXMLNode(cName, eName); if (node != null) { XmlNode par = node.ParentNode; if (res) { string sql = " drop table " + eName; par.RemoveChild(par); } else { par.RemoveChild(node); } } string path = Server.MapPath(xmlPath);//轉換為物理路徑 xmlDoc.Save(path);//將添加的數據保存到文件中 } /// <summary> /// 檢查是否存在值相同的節點 /// </summary> /// <param name="cName">中文表明</param> /// <param name="eName">英文表明</param> /// <returns>查找到的節點</returns> public XmlNode GetXMLNode(string cName, string eName) { XmlNode resout = null; XmlNode nodeRoot = xmlDoc.SelectSingleNode("DBTable");//找到根節點 for (int i = 0; i < nodeRoot.ChildNodes.Count; i++) { var tab = nodeRoot.ChildNodes[i]; var c_Name = tab.ChildNodes[0].InnerText; var e_Name = tab.ChildNodes[1].InnerText; if (cName == c_Name && e_Name == eName) { resout = tab; break; } } return resout; } /// <summary> /// 修改節點 /// </summary> /// <param name="cName">y中文名</param> /// <param name="EName">英文名</param> /// <returns></returns> public bool UpdateNode(string cName, string eName) { bool resoult = false; XmlNode nodeRoot = xmlDoc.SelectSingleNode("DBTable");//找到根節點 for (int i = 0; i < nodeRoot.ChildNodes.Count; i++) { var tab = nodeRoot.ChildNodes[i]; if (tab.ChildNodes[1].InnerText == eName) { tab.ChildNodes[0].InnerText = cName; string path = Server.MapPath(xmlPath);//轉換為物理路徑 xmlDoc.Save(path);//將添加的數據保存到文件中 resoult = true; } } return resoult; } /// <summary> /// 獲取數據表字段 /// </summary> /// <param name="eName">英文表名</param> /// <param name="cName">中文表名</param> /// <returns>用’¦‘ 分割 第一個數據列為因為列表名 用‘,’ 號隔開 第二個數據列為備注名用‘[’ 隔開</returns> public string Check(string eName, string cName) { string resout = ""; XmlNode node = GetXMLNode(cName, eName); if (node != null) { //獲取列集合 var columns = node.SelectSingleNode("columns"); for (int i = 0; i < columns.ChildNodes.Count; i++) { resout += columns.ChildNodes[i].Attributes[0].Value.ToString() + ","; } resout = resout.Substring(0, resout.Length - 1); resout += "¦"; for (int i = 0; i < columns.ChildNodes.Count; i++) { resout += columns.ChildNodes[i].Attributes[2].Value.ToString() + "["; } resout = resout.Substring(0, resout.Length - 1); } return resout; } #region 張國強 2014-02-24 /// <summary> /// 獲取所有的數據表名稱 /// </summary> /// <returns>獲取xml數據中的中文名和英文名格式【中文名,英文名】結果需要拆分以逗號拆分</returns> public List<XMLTableInfo> GetTableList() { List<XMLTableInfo> tableList = new List<XMLTableInfo>(); var node = xmlDoc.SelectSingleNode("DBTable"); for (int i = 0; i < node.ChildNodes.Count; i++) { XMLTableInfo tb = new XMLTableInfo(); tb.CName = node.ChildNodes[i].ChildNodes[0].InnerText.ToString(); tb.EName = node.ChildNodes[i].ChildNodes[1].InnerText.ToString(); tableList.Add(tb); } return tableList; } public string GetIdentity(string eName, string cName) { string iditent = ""; //獲取節點 XmlNode node = GetXMLNode(cName, eName); if (node != null) { iditent = node.SelectSingleNode("Identity").InnerText; } return iditent; } #endregion } /// <summary> /// XML 數據表名稱結構 /// </summary> public class XMLTableInfo { /// <summary> /// 中文名稱 /// </summary> public string CName { get; set; } /// <summary> /// 英文名稱 /// </summary> public string EName { get; set; } }}
Web.Config
<?xml version="1.0" encoding="utf-8"?> <!-- 有關如何配置 ASP.NET 應用程序的詳細信息,請訪問 http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <connectionStrings> <!--數據庫連接字段--> <add name="SqlServer" connectionString="server=192.168.1.124;database=ExcelToSqlserver; uid=sa; pwd=123;"/> <!--XML文件路徑--> <add name="XMLPath" connectionString="~/DBTablePage.xml" /> <!--EXCEL 數據導入表文件--> <add name="ExcelUpLoadPath" connectionString="~/upload/EXCEL/" /> <add name="RecorddPath" connectionString="../upload/attached/" /> </connectionStrings> <system.web> <compilation debug="true" targetFramework="4.0" /> <httpRuntime requestValidationMode="2.0" /> </system.web> </configuration>
還需要一個EXCEL的Helper類
/** *張國強 2014-02-10 *目的管理excel文件的讀寫 *數據讀取,表頭檢查 *數據類型檢查 */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data; using System.Data.OleDb; using System.IO; using System.Configuration; using System.Web.UI.WebControls; namespace CommonLib { public class ExcelHelper : System.Web.UI.Page { static string conStr = ConfigurationManager.ConnectionStrings["SqlServer"].ToString(); static SqlConnection con = new SqlConnection(conStr); /// <summary> /// 通過不同的文件名稱獲取不同的鏈接對象 /// </summary> /// <param name="path">上傳路徑地址</param> /// <returns>返回鏈接對象</returns> public static OleDbConnection GetConnection(string path) { /*Office 2007*/ string ace = "Microsoft.ACE.OLEDB.12.0"; /*Office 97 - 2003*/ string jet = "Microsoft.Jet.OLEDB.4.0"; string xl2007 = "Excel 12.0 Xml"; string xl2003 = "Excel 8.0"; string imex = "IMEX=1"; /* csv */ string text = "text"; string fmt = "FMT=Delimited"; string hdr = "NO"; string conn = "Provider={0};Data Source={1};Extended Properties=\"{2};HDR={3};{4}\";"; string ext = Path.GetExtension(path); DataTable dt = new DataTable("data"); switch (ext.ToLower()) { case ".xlsx": conn = String.Format(conn, ace, Path.GetFullPath(path), xl2007, hdr, imex); break; case ".xls": conn = String.Format(conn, jet, Path.GetFullPath(path), xl2003, hdr, imex); break; case ".csv": conn = String.Format(conn, jet, Path.GetDirectoryName(path), text, hdr, fmt); //sheet = Path.GetFileName(path); break; default: throw new Exception("File Not Supported!"); } OleDbConnection con = new OleDbConnection(conn); return con; } /// <summary> /// 根據excel路徑和sheet名稱,返回excel的DataTable /// </summary> public static DataTable GetExcelDataTable(string path, string tname) { string select = string.Format("SELECT * FROM [{0}$]", tname); string ext = Path.GetExtension(path); OleDbDataAdapter oda; DataTable dt = new DataTable("data"); OleDbConnection con = GetConnection(path); con.Open(); oda = new OleDbDataAdapter(select, con); oda.Fill(dt); con.Close(); return dt; } /// <summary> /// 獲取數據表中的Sheet名稱 /// 2014-02-26 /// 問題后延 /// </summary> /// /// <param name="saveName">上傳文件路徑名稱</param> /// <returns>Sheet數據列表</returns> public static List<string> GetExcelSheetName(string saveName) { List<string> list = null; Microsoft.Office.Interop.Excel.ApplicationClass excelApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); Microsoft.Office.Interop.Excel.Workbooks wbs = excelApp.Workbooks; Microsoft.Office.Interop.Excel.Workbook wb = wbs.Open(saveName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); int count = wb.Worksheets.Count; if (count > 0) { list = new List<string>(); for (int i = 0; i < count; i++) { string name = ((Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[i]).Name; list.Add(name); } wb.Close(null, null, null); excelApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); System.Runtime.InteropServices.Marshal.ReleaseComObject(wbs); excelApp = null; wbs = null; wb = null; GC.Collect(); } return list; } /// <summary> /// 讀取Excel表中有效數據生成數據集合 /// 2014-02-26 /// </summary> /// <param name="dTable">DataTable</param> /// <param name="rowIndex">行有效數據開始</param> /// <param name="colIndex">列有效數據開始</param> /// <param name="saveName">Excel上傳文件保存路徑</param> /// <param name="sheetName">Sheet名稱 默認為Sheet1</param> /// <returns>返回數據表數據用逗號隔開</returns> public static List<string> GetExcelDate(int rowIndex, int colIndex, string saveName, string sheetName = "Sheet1") { List<string> list = null; DataTable dtabe = ExcelHelper.GetExcelDataTable(saveName, sheetName); int icolums = dtabe.Columns.Count; int irows = dtabe.Rows.Count; //獲取數據表中數據 if (irows > rowIndex) { list = new List<string>(); for (int j = rowIndex; j < irows; j++) { string da = ""; for (int i = colIndex; i < icolums; i++) { da += dtabe.Rows[j][i].ToString() + ","; } if (da.Length != icolums)//判讀空數據行 { da = da.Substring(0, da.Length - 1); list.Add(da); } } } return list; } /// <summary> /// 檢查Excel數據表中的表頭和數據庫中的表頭時候相符 /// 2014-02-26 /// </summary> /// <param name="eName">數據庫中的英文表名</param> /// <param name="cName">中文備注表名名稱</param> /// <param name="saveName">上傳Excel文件保存路徑地址服務器地址</param> /// <param name="sheetName">Excel數據表中Sheet名稱</param> /// <returns>返回檢測結果,結果為空值驗證通過,不為空值驗證失敗不可以正常導入</returns> public string CheckExcelTitle(string eName, string cName, string saveName, string sheetName = "Sheet1") { string resout = ""; XMLBase xmlBase = new XMLBase(); xmlBase.LoadDome(); //獲取數據表格字段值 string che = xmlBase.Check(eName, cName); string[] columesInfo = null; if (che != "") { columesInfo = che.Split('¦'); } string ename = columesInfo[0]; string cname = columesInfo[1]; //獲得數據表中列字段值 // ename = ename.Substring(0, ename.Length - 1); //獲得XML數據列名 // cname = cname.Substring(0, cname.Length - 1); string[] TbE_name = ename.Split(','); string[] TbC_name = cname.Split('['); DataTable dtabe = ExcelHelper.GetExcelDataTable(saveName, sheetName); int icolums = dtabe.Columns.Count; int irows = dtabe.Rows.Count; //獲取表頭 List<string> list = new List<string>(); string na = ""; for (int i = 0; i < icolums; i++) { na += dtabe.Rows[0][i].ToString() + "+"; list.Add(dtabe.Rows[0][i].ToString()); } if (list.Count != TbC_name.Length) { resout = "列名和數據庫中列名長度不一樣!"; } else { for (int i = 0; i < TbC_name.Length; i++) { if (TbC_name[i] != list[i]) { string mes = "第" + (i + 1) + "列表頭不是【" + TbC_name[i] + "】請重新調整"; resout += mes; } } } return resout; } /// <summary> /// 獲取SQl數據集 /// </summary> /// <param name="sql"></param> /// <returns></returns> public static DataSet GetDataSet(string sql) { if (sql == "") { return null; } SqlConnection con = new SqlConnection(); con.ConnectionString = conStr; con.Open(); SqlDataAdapter adp = new SqlDataAdapter(sql, con); DataSet ds = new DataSet(); adp.Fill(ds, "table"); con.Close(); return ds; } #region 2014-02-28 生成執行語句 /// <summary> /// 生成添加數據Sql語句 /// 2014-02-26 /// </summary> /// <returns>通過傳入參數返回添加Sql語句最后需要添</returns> public static string InserToSqlQuerystring(string eName, string cName) { string sql = ""; XMLBase xml = new XMLBase(); xml.LoadDome(); //獲取列名 string che = xml.Check(eName, cName); if (che != "") { sql = "insert into " + eName + " ("; //截取數據 string colums = che.Split('¦')[0]; sql += colums + ") values "; } return sql; } /// <summary> /// 獲取刪除語句 /// </summary> /// <param name="eName">英文名稱</param> /// <param name="cName">中文名稱</param> /// <param name="id">需要刪除的Id編號</param> /// <returns></returns> public static string DeleteQuerystring(string eName, string cName, string id) { string sql = ""; //獲取數據表數據列 XMLBase xml = new XMLBase(); xml.LoadDome(); //獲取列名 string che = xml.GetIdentity(eName, cName); if (id.IndexOf(',') == -1) { sql = "delete " + eName + " where " + che + "= " + id; } else { sql = "delete " + eName + " where " + che + " in ( " + id + " )"; } return sql; } /// <summary> /// 動態生成修改語句 /// </summary> /// <param name="eName">英文名</param> /// <param name="cName">中文名</param> /// <param name="id">編號ID</param> /// <returns> 語句</returns> public static string UpdateQueryString(string eName, string cName, int id) { string sql = ""; XMLBase xml = new XMLBase(); xml.LoadDome(); //獲取列名 string che = xml.Check(eName, cName); sql = "update " + eName + " set "; if (che != "") { string[] colums = che.Split('¦')[0].Split(','); for (int i = 0; i < colums.Length; i++) { sql += colums[i] + "= {" + i + "} ,"; } } sql = sql.Substring(0, sql.Length - 1); sql += " where " + xml.GetIdentity(eName, cName) + "=" + id; return sql; } /// <summary> /// 查詢出一條數據 /// </summary> /// <param name="eName">中文表明</param> /// <param name="cName">英文表明</param> /// <param name="id">主鍵Id</param> /// <returns></returns> public static string GetModelQueryString(string eName, string cName, int id) { string sql = ""; XMLBase xBase = new XMLBase(); xBase.LoadDome(); sql = "select * from " + eName + " where " + xBase.GetIdentity(eName, cName) + " =" + id; return sql; } //2014-03-03 生成執行語句 /// <summary> /// 獲取查詢數據總數量 /// </summary> /// <param name="eName"></param> /// <param name="cName"></param> /// <returns></returns> public static string GetCountQueryString(string eName, string where) { string countsql = "select count(*) from " + eName + " "; if (where != "") { countsql += " where " + where; } return countsql; } /// <summary> ///動態生成分頁語句 /// </summary> /// <param name="eName"></param> /// <param name="cName"></param> /// <param name="strWhere">查詢條件</param> /// <param name="orderby">派</param> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <returns></returns> public static string GetPageQueryStrong(string eName, string cName, string strWhere, string orderby, int pageIndex, int pageSize) { StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT * FROM ( "); strSql.Append(" SELECT ROW_NUMBER() OVER ("); if (!string.IsNullOrEmpty(orderby.Trim())) { strSql.Append("order by T." + orderby); } else { XMLBase ba = new XMLBase(); ba.LoadDome(); strSql.Append("order by T." + ba.GetIdentity(eName, cName) + " desc"); } strSql.Append(")AS Row, T.* from " + eName + " T "); if (!string.IsNullOrEmpty(strWhere.Trim())) { strSql.Append(" WHERE " + strWhere); } strSql.Append(" ) TT"); strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", (pageIndex - 1) * pageSize + 1, pageIndex * pageSize); return strSql.ToString(); } #endregion #region 2014-02-28 執行結果 /// <summary> /// 向數據庫中添加數據 /// 2014-02-26 /// </summary> /// <param name="sql">執行的Sql語句返回影響數據庫中的行數</param> /// <returns></returns> public static int ExecuteNonQuery(string sql) { int resour = 0; try { con.Open(); SqlCommand cmd = new SqlCommand(sql, con); resour = cmd.ExecuteNonQuery(); con.Close(); GC.Collect(); } catch (Exception) { con.Close(); } return resour; } /// <summary> /// 添加 修改,數據庫返回情況 /// </summary> /// <param name="sql"></param> /// <returns></returns> public static int ExecSclaer(string sql) { int resour = 0; try { con.Open(); SqlCommand cmd = new SqlCommand(sql, con); object obj = cmd.ExecuteScalar(); resour = Convert.ToInt32(obj); con.Close(); GC.Collect(); } catch (Exception) { con.Close(); GC.Collect(); } return resour; } /// <summary> /// 獲取一條數據 /// </summary> /// <param name="sql"></param> /// <returns>返回單挑數據'¦'隔開</returns> public static string SelectToSqlModel(string sql) { string vals = ""; SqlCommand cmd = new SqlCommand(sql, con); con.Open(); SqlDataReader read = cmd.ExecuteReader(CommandBehavior.CloseConnection); if (read.HasRows) { while (read.Read()) { for (int i = 0; i < read.FieldCount; i++) { vals += read[i].ToString() + "¦"; } } } read.Close(); con.Close(); GC.Collect(); vals = vals.Substring(0, vals.Length - 1); return vals; } #endregion #region Excel 模板導出 public static void exportTemper(string eName, string cName, string saveName, string sql) { //自行拓展 } #endregion } }
在有的電腦生進行數據導入 出現未在本地計算機上注冊“microsoft.ACE.oledb.12.0”提供程序 錯誤
處理方法:解決辦法:
去http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe下載。
然后安裝就行了。
安裝此插件以后將會支持到office2010 的的文件
關鍵頁面代碼:
創建數據表頁面
前台界面;
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ExcelToSqlserver.Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>XML操作處理</title> </head> <body> <form id="form1" runat="server"> <div> <h3>創建表格:</h3> <p> 中文表名:<asp:TextBox ID="txtCname" runat="server"></asp:TextBox> <br /> <br /> 數據表名:<input type="text" id="txtEName" runat="server" onkeyup="this.value=this.value.replace(/[^a-zA_Z_]/,'');" />提示:接受輸入字母和下划線 <br /> <br /> 數據主鍵:<input type="text" runat="server" id="txtIditent" size="20" onkeyup="this.value=this.value.replace(/[^a-zA-Z_]/,'');" /> 提示:接受輸入字母和下划線 <br /> <br /> <asp:Button ID="btnAdd" runat="server" OnClick="Button1_Click" Enabled="false" Text="添加" Style="height: 21px" /> <asp:Button ID="btnChange" runat="server" OnClick="Button2_Click" Enabled="false" Text="修改" /> <asp:Button ID="btnDel" runat="server" OnClick="Button3_Click" Enabled="false" Text="刪除" /> <asp:Button ID="btnCheck" runat="server" OnClick="btnCheck_Click" Text="檢查" /> <br /> <asp:Label ID="Label1" runat="server"></asp:Label> </p> </div> </form> </body> </html>
后台代碼
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using CommonLib; namespace ExcelToSqlserver { public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } /// <summary> /// 添加節點 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Button1_Click(object sender, EventArgs e) { XMLBase xmlBase = new XMLBase(); xmlBase.LoadDome(); bool res = xmlBase.CheckNode(txtCname.Text, txtEName.Value); if (res) { xmlBase.InsertNode(txtCname.Text, txtEName.Value, txtIditent.Value); //跳轉向數據表中添加數據列 Response.Redirect("IniTableColums.aspx?cName=" + txtCname.Text + "&eName=" + txtEName.Value); } else { Label1.Text = "該表存在請重新命名"; } } protected void Button2_Click(object sender, EventArgs e) { XMLBase xmlBase = new XMLBase(); xmlBase.LoadDome(); bool res = xmlBase.UpdateNode(txtCname.Text, txtEName.Value); Label1.Text = res.ToString(); } protected void Button3_Click(object sender, EventArgs e) { XMLBase xb = new XMLBase(); xb.LoadDome(); xb.DeleteNode(txtCname.Text, txtEName.Value, true); } protected void btnCheck_Click(object sender, EventArgs e) { //獲取數據 string cName = txtCname.Text.Trim(); string eName = txtEName.Value.Trim(); string identrty = txtIditent.Value.Trim(); if (cName=="") { Label1.Text = "提示:表名不能為空!"; return; } if (eName=="") { Label1.Text = "提示:數據表名不能為空!"; return; } if (identrty=="") { Label1.Text = "提示:主鍵不能為空!"; return; } XMLBase xmlBase = new XMLBase(); xmlBase.LoadDome(); bool res=xmlBase.CheckNode(txtCname.Text, txtEName.Value); if (res) { Label1.Text = "提示:可以添加表"; btnAdd.Enabled = true; } else { btnChange.Enabled = true; btnDel.Enabled = true; Label1.Text = "提示:用戶表存在,請修改表名"; } } } }
添加表后將或跳轉到動態添加數據列頁面
前台界面
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="IniTableColums.aspx.cs" Inherits="ExcelToSqlserver.IniTableColums" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>數據庫表頭設計</title> <script type="text/javascript" src="Scripts/jquery-1.8.2.min.js"></script> </head> <body> <form id="form1" runat="server"> 當前位置:添加表頭<br /> <br /> 數據表名稱:<asp:TextBox ID="txtCName" runat="server" ReadOnly="True"></asp:TextBox> <input type="hidden" runat="server" id="hiddTableName" /> <br /> <br /> <h3>提示:英文名是需要在數據庫中保存的由字母和下划線組成</h3> <div class="divCoulm"> <hr /> 英文名:<input class="txtEName" type="text" onkeyup="this.value=this.value.replace(/[^a-zA-Z]/,'');" /> 對應數據類型:<select class="rdType"> <option value="nvarchar(MAX)" selected="selected">文字類型</option> <option value="float">小數類型</option> <option value="int">整數類型</option> </select> <br /> <br /> 備注名:<input type="text" class="txtBeizhu" /> 數據字節長度:<select class="txtLenght"> <option value="varchar(10)">10</option> <option value="varchar(20)">20</option> <option value="nvarchar(MAX)">最大</option> </select> <br /> <br /> <input type="button" onclick="del(this)" class="delColum" value="刪除" /> <br /> <hr /> </div> <input type="button" value="繼續添加數據列" id="btnGo" /> <input type="button" value="確定" id="btnOK" /> </form> </body> </html> <script type="text/javascript"> $(function () { //聲明列名錄入界面 var addDocument = " <div class='divCoulm'> <hr /> 英文名:<input class='txtEName' onkeyup=\"this.value=this.value.replace(/[^a-zA-Z]/,'');\" type='text' /> 英文名有字母組成,沒有下划線<br/> 對應數據類型:<select class='rdType'>"; addDocument += " <option value='nvarchar(MAX)' selected='selected'>文字類型</option> <option value='float'>小數類型</option>"; addDocument += " <option value='varchar(9)'>整數類型</option></select><br /> <br /> 備注名:<input type='text' class='txtBeizhu' />"; addDocument += " 數據字節長度:<select class='txtLenght'> <option value='varchar(10)'>10</option> <option value='varchar(20)'>20</option><option value='nvarchar(MAX)'>最大</option></select> <br /> <br /> <input type=\"button\" class=\"delColum\" onclick=' del(this)' value=\"刪除\" /> <hr /> </div>"; $("#btnGo").click(function () { var isGo; var div = $(this).prev("div"); var eName = div.children(".txtEName").val();//英文名 var eType = div .children(".rdType").val();//數據類型 var cName = div .children(".txtBeizhu").val();//中文名稱 var cLength = div.children(".txtLenght").val();//字段長度 isGo = CheckVoide(eName, eType, cName, cLength); if (!isGo) { alert("數據有誤"); } else { $(".divCoulm").last().append(addDocument); } }); $("#btnOK").click(function () { //獲取數據 var mess = ""; $(".divCoulm").each(function () { var eName = $(this).children(".txtEName").val();//英文名 var eType = $(this).children(".rdType").val();//數據類型 var cName = $(this).children(".txtBeizhu").val();//中文名稱 var cLength = $(this).children(".txtLenght").val();//字段長度 var isGo = CheckVoide(eName, eType, cName, cLength); if (isGo) { mess += eName + "_" + eType + "_" + cName + "_" + cLength + "|"; } }); debugger; var go = confirm("確認添加添加后不得修改"); if (go) { var tableName = $("#hiddTableName").val();//英文名稱 var tableCName = $("#txtCName").val();//中文名稱; $.post("Ajax/CreatInfoToXML.ashx", { tableName: tableName, tableCName: tableCName, mess: mess }, function () { window.location.href = "EnterExcel.aspx"; }); } }); $(".delColum").click(function () { debugger; $(this).parent("div").html(""); }); }); //檢查數據是否為空 function CheckVoide(eName, eType, cName, cLength) { if (eName == "" || eType == "" || cName == "" || cLength == "") { return false; } else if (eName != "" || eType != "" || cName != "" || cLength != "") { return true; } } function del(id) { $(id).parent("div").remove(); } </script>
后台
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { txtCName.Text = Request.QueryString["cName"].ToString(); hiddTableName.Value = Request.QueryString["eName"].ToString(); } }
在進行添加數據列是通過異步進行添加的
Ajax/CreatInfoToXML.ashx
/** *張國強 2014-02-20 *將excel中的數據表結構序列化到XML中 *同時在數據庫中創建數據表結構方便數據導入到數據中。 *InsertXML(HttpContext context) 將界面錄入的數據列名導入到XML數據結構中 */ using System; using System.Collections.Generic; using System.Linq; using System.Web; // using System.Configuration; using CommonLib; using System.Data; using System.Data.SqlClient; namespace ExcelToSqlserver.Ajax { /// <summary> /// CreatInfoToXML 的摘要說明 /// </summary> public class CreatInfoToXML : IHttpHandler { XMLBase xmlBase = new XMLBase(); public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; InsertXML(context); } //序列化數據到XML文件中 private void InsertXML(HttpContext context) { //獲取值 string tableEName = context.Request.Form["tableName"]; string tableCName = context.Request.Form["tableCName"]; string mess = context.Request.Form["mess"]; //拆分列名 if (mess == "") return; mess = mess.Substring(0, mess.Length - 1); //第一次拆分數據 string[] split1 = mess.Split('|'); xmlBase.LoadDome(); string identity = xmlBase.GetIdentity(tableEName, tableCName); string sql = "create table " + tableEName + "(" + identity + " int identity(1,1) primary key ,"; for (int i = 0; i < split1.Length; i++) { string mess2 = split1[i]; string[] split2 = mess2.Split('_'); //獲取值 string eName = split2[0].ToString(); string eType = split2[1].ToString(); string cName = split2[2].ToString(); string eLenght = split2[3].ToString(); //生成sql語句 sql += eName + " " + eType + " ,"; try { xmlBase.LoadDome(); xmlBase.InsertNode(tableCName, tableEName, eName, eType, cName, eLenght); //生成數據表 } catch (Exception ex) { throw ex; } } CreatTable(sql); } private void CreatTable(string tableSql) { string constr = ConfigurationManager.ConnectionStrings["SqlServer"].ConnectionString; SqlConnection con = new SqlConnection(constr); if (tableSql != "") tableSql = tableSql.Substring(0,tableSql.Length-1); string sql = tableSql + ")"; SqlCommand cmd = new SqlCommand(sql, con); con.Open(); cmd.ExecuteNonQuery(); con.Close(); } public bool IsReusable { get { return false; } } } }
創建表格完成后就可以進行數據導入了
數據導入界面
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EnterExcel.aspx.cs" Inherits="ExcelToSqlserver.EnterExcel" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>EXCEL數據導入</title> <style type="text/css"> li { display: inline; list-style: none; display: inline; list-style: none; padding-left: 15px; } </style> <script type="text/javascript" src="Scripts/jquery-1.8.2.min.js"></script> </head> <body> <form id="form1" runat="server"> <div> <div> <ul> <li><a id="a_insert" runat="server">手動錄入數據</a></li> <li>批量導入數據</li> </ul> </div> <br /> 導入數據:<asp:DropDownList ID="dropTableInfo" runat="server" Height="16px" Width="140px" AutoPostBack="True" OnSelectedIndexChanged="dropTableInfo_SelectedIndexChanged"> </asp:DropDownList> <input type="hidden" runat="server" id="hiddTableName" /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="刪除節點測試" /> <br /> <br /> 選擇EXCEL數據表:<asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Label ID="lblMess" runat="server" Text=""></asp:Label> <br /> <br /> 選擇有效數據行:第<asp:DropDownList ID="dropch" runat="server" Height="16px" Width="61px"> <asp:ListItem>1</asp:ListItem> <asp:ListItem Selected="True">2</asp:ListItem> <asp:ListItem>3</asp:ListItem> <asp:ListItem>4</asp:ListItem> <asp:ListItem Value="5"></asp:ListItem> <asp:ListItem>6</asp:ListItem> </asp:DropDownList>行為有效數據 <br /> <br /> <asp:Button ID="btnCheck" runat="server" Text="檢查" OnClick="btnCheck_Click" /> <asp:Button ID="btnOK" runat="server" Text="確認導入" OnClick="btnOK_Click" Enabled="False" /> <asp:Button ID="btnCon" runat="server" Enabled="false" Text="取消" OnClick="btnCon_Click" /> </div> <div id="divShow" runat="server" visible="false"> <h4>表頭格式:參照以下表頭來制作表格</h4> <strong>你也可以</strong> <br /> <table cellpadding="1px" border="1px" > <tbody id="head" runat="server"> <tr> <th style="border:1px solid;" >asdfafd</th> <th style="border:1px solid;" >asdfafd</th> </tr> </tbody> </table> </div> </form> </body> </html>
后台代碼
/* *張國強 2014-02-20 *excel 表頭檢查 *數據表讀取數據 *SQlserver數據表表頭檢查 *主要操:EXCEL 數據表讀取 */ using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; /// using CommonLib; using System.Configuration; using System.Data; namespace ExcelToSqlserver { public partial class EnterExcel : System.Web.UI.Page { XMLBase xmlBase = new XMLBase(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ViewState["excelPath"] = null; ViewState["start"] = 0; ViewState["end"] = 0; xmlBase.LoadDome(); List<XMLTableInfo> datesource = xmlBase.GetTableList(); if (datesource.Count > 0) { dropTableInfo.DataSource = datesource; dropTableInfo.DataTextField = "CName"; ; dropTableInfo.DataValueField = "EName"; dropTableInfo.DataBind(); dropTableInfo.SelectedIndex = 0; } dropTableInfo.Items.Add(new ListItem() { Text="沒有數據表新建", Value="-1" }); string eName = dropTableInfo.SelectedItem.Value; string cName = dropTableInfo.SelectedItem.Text; a_insert.Attributes.Add("href", "InsertInfo.aspx?cmd=insert&eName=" + eName + "&cName=" + cName); } } /// <summary> /// 檢查數據列表 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnCheck_Click(object sender, EventArgs e) { //上傳到服務器上 string upFulPath = ConfigurationManager.ConnectionStrings["ExcelUpLoadPath"].ConnectionString; if (!FileUpload1.HasFile) { Response.Write("<script>alert('請選擇上傳文件')</script>"); return; } string fileName = FileUpload1.FileName; string filetype = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower(); if (filetype == ".xlsx" || filetype == ".xls") { upFulPath = Server.MapPath(upFulPath); string saveName = upFulPath + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + fileName; FileUpload1.SaveAs(saveName); lblMess.Text = "文件已上傳"; lblMess.Attributes.Add("style", "color:green;"); ViewState["excelPath"] = saveName; btnCon.Enabled=true; xmlBase.LoadDome(); string cName = dropTableInfo.SelectedItem.Text; string eName = dropTableInfo.SelectedValue; ///檢查表頭 string cheInfo = new ExcelHelper().CheckExcelTitle(eName, cName, saveName, "Sheet1"); if (cheInfo == "") { Response.Write("<script>alert('驗證通過')</script>"); btnOK.Enabled = true; } else { //Excel數據表表頭格形式提示 xmlBase.LoadDome(); string tab = xmlBase.Check(eName, cName); string[] tblist = tab.Split('¦')[1].Split('['); string st = "<tr>"; for (int i = 0; i < tblist.Length; i++) { st += "<td>"+tblist[i]+"</td>"; } st+="</tr>"; this.head.InnerHtml = st; divShow.Visible = true; Response.Write("<script>alert('" + cheInfo + "')</script>"); } } else { lblMess.Text = "不是有效的excel文件!請重選"; return; } FileUpload1.Enabled = false; btnCheck.Enabled = false; } /// <summary> /// 導入數據 /// 2014-02-16 /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnOK_Click(object sender, EventArgs e) { string path = ViewState["excelPath"].ToString(); int rowIndex = Convert.ToInt32(dropch.SelectedValue); List<string> list = ExcelHelper.GetExcelDate(rowIndex - 1, 0, path, "Sheet1"); string cName = dropTableInfo.SelectedItem.Text; string eName = dropTableInfo.SelectedValue; string sql = ExcelHelper.InserToSqlQuerystring(eName, cName); int inseCount = 0; for (int i = 0; i < list.Count; i++) { string vals = ""; for (int j = 0; j < list[i].Split(',').Length; j++) { vals += "'" + list[i].Split(',')[j] + "' ,"; } vals = vals.Substring(0, vals.Length - 1); string inser = sql + " (" + vals + " );select @@IDENTITY"; if (i==0) { ViewState["start"] = ExcelHelper.ExecSclaer(inser); } else if(i==list.Count-1) { ViewState["end"] = ExcelHelper.ExecSclaer(inser); } else { ExcelHelper.ExecSclaer(inser); } } string mess = "Excel有效數據:" + list.Count + " 條 已經成功導入數據:" + inseCount + "條"; Response.Write("<script>alert('" + mess + "')</script>"); Response.Redirect("ExcelListShow.aspx?tbname=" + dropTableInfo.SelectedValue + "&start="+ViewState["start"].ToString()+"&end="+ViewState["end"].ToString()+"&cName="+dropTableInfo.SelectedItem.Text+"&eName="+dropTableInfo.SelectedValue); } //取消刪除數據表 protected void btnCon_Click(object sender, EventArgs e) { string path = ViewState["excelPath"].ToString(); bool re = System.IO.File.Exists(path); if (re) { System.IO.File.Delete(path); lblMess.Text = "上傳文件已刪除"; lblMess.Attributes.Add("style","color:green;"); btnOK.Enabled = false; ViewState["excelPath"] = ""; divShow.Visible = false; btnCon.Enabled = false; btnCheck.Enabled= true; FileUpload1.Enabled = true; } } protected void dropTableInfo_SelectedIndexChanged(object sender, EventArgs e) { string eName = dropTableInfo.SelectedItem.Value; string cName = dropTableInfo.SelectedItem.Text; lblMess.Text = ""; if (eName=="-1") { Response.Redirect("Default.aspx"); } else { a_insert.Attributes.Add("href", "InsertInfo.aspx?cmd=insert&eName=" + eName + "&cName=" + cName); } } protected void btnOutTemp_Click(object sender, EventArgs e) { string eName = dropTableInfo.SelectedItem.Value; string cName = dropTableInfo.SelectedItem.Text; } protected void Button1_Click(object sender, EventArgs e) { XMLBase xb = new XMLBase(); xb.LoadDome(); xb.DeleteNode("中文名", "china", false); } } }
數據到導入完成后將會將最新的導入數據展示到另一個頁面上
前台
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ExcelListShow.aspx.cs" Inherits="ExcelToSqlserver.ExcelListShow" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>最新導入的數據列表查看</title> <script type="text/javascript" src="Scripts/jquery-1.8.2.min.js"></script> </head> <body> <form id="form1" runat="server"> <div> <input type="hidden" id="hiddcName" runat="server" /> <input type="hidden" id="hiddeName" runat="server" /> <input type ="hidden" id="hiddcmd" runat="server" /> <a id="a_Add" runat="server">添加數據</a> <a id="a_Del" href="#" runat="server">刪除數據</a> </div> <div style="text-align:center;"> <asp:GridView ID="NewGrid" runat="server"> <Columns> </Columns> </asp:GridView> </div> </form> </body> </html> <script type="text/javascript"> $(function () { //全選擇 全部不選擇 $(".heck_box").click(function () { var t = $(this).attr("checked"); if (t) { $(".CheckBox").attr("checked", t); } else { $(".CheckBox").attr("checked", false); } }); //刪除數據隱藏行 $(".A_DelBind").click(function () { $(this).parent("td").parent("tr").hide(); }); //刪除事件 $("#a_Del").click(function () { //獲取表明 var eName = $("#hiddeName").val(); var cName = $("#hiddcName").val(); var id = ""; //獲取主鍵ID $(".CheckBox").each(function () { var t = $(this).attr("checked"); if (t) { id += $(this).val() + ","; } }); if (id=="") { alert("沒有選中刪除數據!"); return false; } if (id.length>2) { id = id.substring(0, id.length - 1); } var con = confirm("即將刪除數據,刪除后不能回復!"); if (con) { $.get("Ajax/AjaxDateToSql.ashx", { cmd: "delete", id: id, cName: cName, eName: eName }, function () { }); } }); }); </script>
后台主要是數據綁定
后台
/* * 張國強 * 2014-02-26 * 動態生成GridView數據列表 * 創建超鏈接 * * **/ using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; // using CommonLib; namespace ExcelToSqlserver { public partial class ExcelListShow : System.Web.UI.Page { XMLBase xBase = new XMLBase(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string tbname = Request.QueryString["tbname"].ToString(); ViewState["start"] = Request.QueryString["start"].ToString(); ViewState["end"] = Request.QueryString["end"].ToString(); string cName = Request.QueryString["cName"].ToString(); ViewState["cName"] = cName; string eName = Request.QueryString["eName"].ToString(); //////測試 //string tbname = "RZZGTZ"; //Request.QueryString["tbname"].ToString(); //string top = "20";// Request.QueryString["top"].ToString(); //string cName = "任職資格台賬";// Request.QueryString["cName"].ToString(); //ViewState["cName"] = cName; //string eName = "RZZGTZ";// Request.QueryString["eName"].ToString(); hiddcName.Value = cName; hiddeName.Value = eName; ViewState["eName"] = eName; xBase.LoadDome(); ViewState["identity"] = xBase.GetIdentity(eName, cName); a_Add.Attributes.Add("href", "InsertInfo.aspx?cName=" + cName + "&eName=" + eName + "&cmd=insert"); xBase.LoadDome(); //加載數據數據庫中列名和備注名 string tbInfo = xBase.Check(eName, cName); ViewState["tableInfo"] = null; if (tbInfo != null) { ViewState["tableInfo"] = tbInfo; } //數據綁定 string sql = "select * from " + eName + " where " + xBase.GetIdentity(eName,cName)+" between "+ ViewState["start"].ToString()+" and "+ ViewState["end"].ToString(); new GridViewTemplate().LoadInfo(this.NewGrid, eName, cName, sql); } } } }
前台主操作主要用到的是異步操作
/*2014-02-27 * 張國強 * Email:imei8service@gmail.com * 前台頁面提交數據處理 * 包括添加數據 * 修改數據 * 刪除數據 * 三種操作 * * **/ using System; using System.Collections.Generic; using System.Linq; using System.Web; // using CommonLib; namespace ExcelToSqlserver.Ajax { /// <summary> /// AjaxDateToSql 的摘要說明 /// </summary> public class AjaxDateToSql : IHttpHandler { XMLBase xBase = new XMLBase(); public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string cmd = context.Request.QueryString["cmd"].ToString(); switch (cmd) { case "insert"://添加數據 Insert(context); break; case "delete"://刪除數據 Delete(context); break; case "editor": Editor(context); break; default: break; } } /// <summary> /// 修改數據 /// </summary> /// <param name="context"></param> private void Editor(HttpContext context) { try { string cName = context.Request.QueryString["cName"].ToString(); string eName = context.Request.QueryString["eName"].ToString(); string id = context.Request.QueryString["id"].ToString(); string values = context.Request.QueryString["values"].ToString(); string sql = ExcelHelper.UpdateQueryString(eName, cName, Convert.ToInt32(id)); string[] val = values.Split('¦'); string sql2 = string.Format(sql, val); int res = ExcelHelper.ExecuteNonQuery(sql2); if (res > 0) { context.Response.Write("修改成功"); } else { context.Response.Write("NO"); } } catch (Exception ex) { context.Response.Write("NO"); } } /// <summary> /// 刪除數據 /// </summary> /// <param name="context"></param> private void Delete(HttpContext context) { //cName=""&eName=&id=' string cName = context.Request.QueryString["cName"].ToString(); string eName = context.Request.QueryString["eName"].ToString(); string id = context.Request.QueryString["id"].ToString(); //獲取刪除語句 string s = ExcelHelper.DeleteQuerystring(eName, cName, id); int resout = ExcelHelper.ExecuteNonQuery(s); if (resout > 0) { context.Response.Redirect("../ShowList.aspx?cName=" + cName + "&eName=" + eName); } } /// <summary> /// 添加數據 /// </summary> /// <param name="context"></param> private void Insert(HttpContext context) { string sql = context.Request.QueryString["values"].ToString(); string eName = context.Request.QueryString["eName"].ToString(); string cName = context.Request.QueryString["cName"].ToString(); if (sql != "") { xBase.LoadDome(); string s = ExcelHelper.InserToSqlQuerystring(eName, cName); string[] va = sql.Split('¦'); string v = ""; for (int i = 0; i < va.Length; i++) { v += va[i] + ","; } v = v.Substring(0, v.Length - 1); s += " (" + v + " );select @@IDENTITY"; int t = ExcelHelper.ExecSclaer(s); if (t > 0) { context.Response.Write("添加成功"); } else { context.Response.Write("NO"); } } else { context.Response.Write("NO"); } } public bool IsReusable { get { return false; } } } }
后台運用的的是動態綁定數據
將數據庫中的列名通過后台綁定到Griview中並給出並且綁定操作列
/* * 2014-02-27 * GridView數據列綁定幫助文檔 * 用於動態添查詢數據綁定到數據表中 * 提供各種類型的綁定 * * **/ using System; using System.Collections.Generic; using System.Linq; using System.Text; // using System.Web.UI; using System.Web.UI.WebControls; namespace CommonLib { /// <summary> /// GridView數據列綁定中興 /// </summary> public class GridViewTemplate : ITemplate { public delegate void EventHandler(object sender, EventArgs e); public event EventHandler eh; private DataControlRowType templateType; private string columnName; private string controlID; private XMLTableInfo xmTable = null; private BindType bind = BindType.label; public GridViewTemplate() { } /// <summary> /// 構造函數 /// </summary> /// <param name="type">綁定列類型</param> /// <param name="colname">綁定列名稱或者需要綁定的數據庫字段</param> /// <param name="colname">綁定字段類型控件</param> public GridViewTemplate(DataControlRowType type, string colname, BindType bin, XMLTableInfo tab) { templateType = type; columnName = colname; bind = bin; this.xmTable = tab; } /// <summary> /// 綁定事件 /// </summary> /// <param name="type"></param> /// <param name="controlID"></param> /// <param name="colname"></param> public GridViewTemplate(DataControlRowType type, string controlID, string colname) { templateType = type; this.controlID = controlID; columnName = colname; } public void InstantiateIn(System.Web.UI.Control container) { switch (templateType) { case DataControlRowType.Header://標題綁定 if (bind == BindType.label) { Literal lc = new Literal(); lc.Text = columnName; container.Controls.Add(lc); } if (bind == BindType.checkbok) { Literal lc = new Literal(); lc.Text = "<input type='checkbox' class='heck_box' />全選"; container.Controls.Add(lc); } if (bind == BindType.editor) { Literal lc = new Literal(); lc.Text = "編輯"; container.Controls.Add(lc); } if (bind == BindType.delete) { Literal lc = new Literal(); lc.Text = "";// "刪除"; container.Controls.Add(lc); } break; case DataControlRowType.DataRow://普通列綁定 if (bind == BindType.label) { Label tb = new Label(); tb.DataBinding += tb_DataBinding; container.Controls.Add(tb); } if (bind == BindType.checkbok) { Literal lic = new Literal(); lic.DataBinding += lic_DataBinding; container.Controls.Add(lic); } if (bind == BindType.editor) { Literal lec = new Literal(); lec.DataBinding += lec_DataBinding; container.Controls.Add(lec); } if (bind == BindType.editor) { Literal del = new Literal(); del.DataBinding += del_DataBinding; container.Controls.Add(del); } break; default: break; } } void del_DataBinding(object sender, EventArgs e) { Literal tb = (Literal)sender; GridViewRow row = (GridViewRow)tb.NamingContainer; tb.ID = columnName; tb.Text = " <a class='A_DelBind' href='Ajax/AjaxDateToSql.ashx?cmd=delete&cName=" + xmTable.CName + "&eName=" + xmTable.EName + "&id=" + DataBinder.Eval(row.DataItem, columnName).ToString() + "'>刪除</>"; } void lec_DataBinding(object sender, EventArgs e) { Literal tb = (Literal)sender; GridViewRow row = (GridViewRow)tb.NamingContainer; tb.ID = columnName; tb.Text = "<a href='InsertInfo.aspx?cmd=editor&cName=" + xmTable.CName + "&eName=" + xmTable.EName + "&id=" + DataBinder.Eval(row.DataItem, columnName).ToString() + "'>編輯</>"; } void lic_DataBinding(object sender, EventArgs e) { Literal btn = (Literal)sender; GridViewRow row = (GridViewRow)btn.NamingContainer; btn.ID = columnName; btn.Text = "<input type='checkbox' class='CheckBox' value='" + DataBinder.Eval(row.DataItem, columnName).ToString() + "'/>"; } /// <summary> /// 2014-02-27 /// 張國強 /// 綁定字段數據列事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void tb_DataBinding(object sender, EventArgs e) { Label tb = (Label)sender; GridViewRow row = (GridViewRow)tb.NamingContainer; tb.ID = columnName; tb.Text = DataBinder.Eval(row.DataItem, columnName).ToString(); } #region 提取公共部分 /// <summary> /// 綁定數據到GridView控件 /// </summary> /// <param name="NewGrid">GridViews控件</param> /// <param name="eName">英文名稱</param> /// <param name="cName">中文名稱</param> /// <param name="sqlOrTop">需要查詢的數據字符串</param> public void LoadInfo(GridView NewGrid, string eName, string cName,string sqlOrTop) { NewGrid.Columns.Clear(); XMLTableInfo tb = new XMLTableInfo(); tb.CName = cName; tb.EName = eName; XMLBase xBase = new XMLBase(); xBase.LoadDome(); string tableInfo = xBase.Check(eName, cName); //1,拆分數據 string[] Ename = tableInfo.Split('¦')[0].Split(','); string[] Cname = tableInfo.Split('¦')[1].Split('['); xBase.LoadDome(); string id = xBase.GetIdentity(eName, cName); //循環數據 for (int i = 0; i < Ename.Length; i++) { //BoundColumn cu = new BoundColumn(); //cu.DataField = Ename[i]; //cu.HeaderText = Cname[i]; TemplateField temp = new TemplateField(); temp.ShowHeader = true; if (i == 0) { temp.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, Cname[i], BindType.checkbok, tb); temp.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, id, BindType.checkbok, tb); } else { temp.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, Cname[i], BindType.label, tb); temp.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, Ename[i], BindType.label, tb); } NewGrid.Columns.Add(temp); } //添加編輯列 TemplateField tempEditor = new TemplateField(); tempEditor.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "操作", BindType.editor, tb); tempEditor.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, id, BindType.editor, tb); NewGrid.Columns.Add(tempEditor); TemplateField tempDelete = new TemplateField(); tempDelete.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "刪除", BindType.delete, tb); tempDelete.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, id, BindType.delete, tb); NewGrid.Columns.Add(tempDelete); string sql = ""; if (sqlOrTop.Length<11) { sql = "select top " + sqlOrTop + " * from " + eName + " order by " + id + " DESC"; NewGrid.DataSource = ExcelHelper.GetDataSet(sql); } else { NewGrid.DataSource = ExcelHelper.GetDataSet(sqlOrTop); } NewGrid.AutoGenerateColumns = false; NewGrid.DataBind(); } #endregion } public enum BindType { label, checkbok, editor, delete } }
以上代碼提供了不同類型的數據綁定 表頭列數據展示列操作列等都有提供。BindType 提供的枚舉對應的綁定列類型
public enum BindType { label, checkbok, editor, delete }
在以上用的的一些約定
特殊類名
類名 |
作用 |
出現位置 |
heck_box |
控制 全選 全部選 |
會出現在dateGridView表頭位置控制整張表的復選框。 |
CheckBox |
綁定數據主鍵值 |
出現在GridView數據列位置在表頭位置,用來確定數據是否被選中。 |
以上是兩個比較特殊的標簽類名;
特的頁面和特殊的參數:
頁面路徑 |
參數 |
作用 |
InsertInfo.aspx |
cmd:操作指令 [insert,delede,editor] 分別對應增加,刪除 ,編輯功能 eName:數據表對應的英文名 cName:對應的中文名 id:對應的數據主鍵編號 |
添加頁面和編輯頁面為同一個頁面,提供添添加數據錄入界面。 提供加載數據編輯界面。
|
Ajax/AjaxDateToSql.ashx |
需要傳遞參數同上 |
提供異步處理程序。 提供手動增刪改方法。 |
參考: |
href='Ajax/AjaxDateToSql.ashx?cmd=delete&cName=CName&eName=EName&id=id'
InsertInfo.aspx?cmd=editor&cName=CName &eName=EName&id=id' |
|
小節 |
cName 和eName 兩個參數貫穿整個程序 為了保證中文表民和數據庫中的表名一致采用雙重驗證 |
到了這里已經差不多核心代碼都展示完畢
最后一步做個小結
展示數據
前台
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ShowList.aspx.cs" Inherits="ExcelToSqlserver.ShowList" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>數據控制台賬</title> <script type="text/javascript" src="Scripts/jquery-1.8.2.min.js"></script> </head> <body> <form id="form1" runat="server"> <div> <p>當前界面:<label id="lblTitle" runat="server">XXX台賬</label></p> 關鍵字查詢:<input type="text" id="txtKey" runat="server" /><asp:Button ID="btnSech" runat="server" Text="查詢" OnClick="btnSech_Click" /> <br /> <br /> <div> <input type="hidden" id="hiddcName" runat="server" /> <input type="hidden" id="hiddeName" runat="server" /> <input type ="hidden" id="hiddcmd" runat="server" /> <a id="a_Add" runat="server">添加數據</a> <a id="a_Del" href="#" runat="server">刪除數據</a> <br /> </div> </div> <div> <asp:GridView ID="gridView" runat="server"> <Columns></Columns> </asp:GridView> </div> <div style="width: 600px; margin-top: 10px; text-align: center;"> <asp:Button ID="shouye" runat="server" Text="首頁" OnClick="shouye_Click" /> <asp:Button ID="btnUpPage" runat="server" Text="上一頁" OnClick="btnUpPage_Click" /> <asp:Button ID="btnNextPage" runat="server" Text="下一頁" OnClick="btnNextPage_Click" /> <asp:Button ID="weiye" runat="server" Text="尾頁" OnClick="weiye_Click" /> 共<asp:Label ID="lbl_courrentPage" runat="server" Text="1"></asp:Label> 頁 第 <input id="currentpage" type="text" runat="server" style="width: 32px; height: 15px;" />頁 <asp:Button ID="tiaozhuan" runat="server" Text="跳轉" OnClick="tiaozhuan_Click" /> 每頁<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" Height="22px" Width="39px" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> <asp:ListItem Value="10">10</asp:ListItem> <asp:ListItem>20</asp:ListItem> <asp:ListItem>30</asp:ListItem> </asp:DropDownList> 個 </div> </form> </body> </html> <script type="text/javascript"> $(function () { //全選擇 全部不選擇 $(".heck_box").click(function () { var t = $(this).attr("checked"); if (t) { $(".CheckBox").attr("checked", t); } else { $(".CheckBox").attr("checked", false); } }); //刪除數據隱藏行 $(".A_DelBind").click(function () { $(this).parent("td").parent("tr").hide(); }); //刪除事件 $("#a_Del").click(function () { //獲取表明 var eName = $("#hiddeName").val(); var cName = $("#hiddcName").val(); var id = ""; //獲取主鍵ID $(".CheckBox").each(function () { var t = $(this).attr("checked"); if (t) { id += $(this).val() + ","; } }); if (id == "") { alert("沒有選中刪除數據!"); return false; } if (id.length > 2) { id = id.substring(0, id.length - 1); } var con = confirm("即將刪除數據,刪除后不能恢復!"); if (con) { $.get("Ajax/AjaxDateToSql.ashx", { cmd: "delete", id: id, cName: cName, eName: eName }, function () { history.go(0); }); } }); }); </script>
后台
/*2014-3-3 * email:imei8service@gmail.com * 動態顯示數據 * 生成查詢方法 * 自動分頁 * * **/ using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; // using CommonLib; namespace ExcelToSqlserver { public partial class ShowList : System.Web.UI.Page { XMLBase xb = new XMLBase(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { shouye.Enabled = false; btnUpPage.Enabled = false; btnNextPage.Enabled = false; weiye.Enabled = false; ViewState["pageIndex"] = 1; ViewState["pageSize"] = 10; ViewState["pageCount"] = 0; ViewState["where"] = ""; ViewState["cName"] =Request.QueryString["cName"].ToString(); ViewState["eName"] =Request.QueryString["eName"].ToString(); a_Add.Attributes.Add("href", "InsertInfo.aspx?cName=" + ViewState["cName"].ToString() + "&eName=" + ViewState["eName"].ToString() + "&cmd=insert"); hiddcmd.Value = ViewState["cName"].ToString(); hiddeName.Value = ViewState["eName"].ToString(); lblTitle.InnerHtml = ViewState["cName"].ToString(); selctInfo(); } } /// <summary> ///查詢方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnSech_Click(object sender, EventArgs e) { xb.LoadDome(); string[] keowo = xb.Check(ViewState["eName"].ToString(), ViewState["cName"].ToString()).Split('¦')[0].Split(','); string sql =""; string key = txtKey.Value; if (key != "") { for (int i = 0; i < keowo.Length; i++) { if (i==keowo.Length-1) { sql += " " + keowo[i] + " like '%" + key + "%'"; } else { sql += " " + keowo[i] + " like '%" + key + "%'" + " or"; } } sql = sql.Trim().Substring(0, sql.Length - 2); ViewState["where"] = sql; } else { ViewState["where"] = ""; } selctInfo(); } private void ControlManager(int index, int count) { if (index == 1 && count == 1) return; ;//總頁數未一,當前頁第一頁 if (index >= 1 && index < count)//第一頁不是尾頁 { shouye.Enabled = false; btnUpPage.Enabled = false; btnNextPage.Enabled = true; weiye.Enabled = true; tiaozhuan.Enabled = true; } if (index >= 2 && index < count)//不是首頁不是尾頁 { shouye.Enabled = true; btnUpPage.Enabled = true; btnNextPage.Enabled = true; weiye.Enabled = true; tiaozhuan.Enabled = true; } if (index >= 2 && index == count) { shouye.Enabled = true; btnUpPage.Enabled = true; btnNextPage.Enabled = false; weiye.Enabled = false; } } #region 頁面控制 //首頁 protected void shouye_Click(object sender, EventArgs e) { ViewState["pageIndex"] = 1; selctInfo(); this.btnUpPage.Enabled = false; btnNextPage.Enabled = true; } //尾頁 protected void weiye_Click(object sender, EventArgs e) { ViewState["pageIndex"] = ViewState["pageCount"]; selctInfo(); this.btnUpPage.Enabled = true; btnNextPage.Enabled = false; } //跳轉 protected void tiaozhuan_Click(object sender, EventArgs e) { int page = Convert.ToInt32(currentpage.Value); int pageCount = Convert.ToInt32(ViewState["pageCount"]); if (page > pageCount) { currentpage.Value = pageCount.ToString(); ViewState["pageIndex"] = pageCount; selctInfo(); } else { ViewState["pageIndex"] = page; selctInfo(); } } //顯示頁項目 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { ViewState["pageSize"] = DropDownList1.SelectedValue; ViewState["pageIndex"] = 1; selctInfo(); } //上頁 protected void btnUpPage_Click(object sender, EventArgs e) { int pageindex = Convert.ToInt32(ViewState["pageIndex"]); ViewState["pageIndex"] = pageindex - 1; if ((pageindex - 1) <= 1) { ViewState["pageIndex"] = 1; this.btnUpPage.Enabled = false; selctInfo(); } else { selctInfo(); } btnNextPage.Enabled = true; } //下頁 protected void btnNextPage_Click(object sender, EventArgs e) { int pageIndex = Convert.ToInt32(ViewState["pageIndex"]) + 1; if (pageIndex == Convert.ToInt32(ViewState["pageCount"]) || pageIndex > Convert.ToInt32(ViewState["pageCount"])) { ViewState["pageIndex"] = ViewState["pageCount"]; btnNextPage.Enabled = false; selctInfo(); } else { ViewState["pageIndex"] = pageIndex; selctInfo(); } this.btnUpPage.Enabled = true; } #endregion /// <summary> /// 加載數據 /// </summary> private void selctInfo() { //ViewState["cName"] //ViewState["eName"] // ViewState["where"] //得到查詢總數據條數的Sql string sql = ExcelHelper.GetCountQueryString(ViewState["eName"].ToString(), ViewState["where"].ToString()); //獲取分頁插敘語句 xb.LoadDome(); string identity = xb.GetIdentity(ViewState["eName"].ToString(), ViewState["cName"].ToString()); string sqlPage = ExcelHelper.GetPageQueryStrong(ViewState["eName"].ToString(), ViewState["cName"].ToString(), ViewState["where"].ToString(), identity, Convert.ToInt32(ViewState["pageIndex"]), Convert.ToInt32(ViewState["pageSize"])); int recordCount = ExcelHelper.ExecSclaer(sql); new GridViewTemplate().LoadInfo(this.gridView, ViewState["eName"].ToString(), ViewState["cName"].ToString(), sqlPage); int pageIndex = Convert.ToInt32(ViewState["pageIndex"]); int pageSize = Convert.ToInt32(ViewState["pageSize"]); ViewState["pageCount"] = recordCount % pageSize == 0 ? recordCount / pageSize : (recordCount / pageSize) + 1; lbl_courrentPage.Text = ViewState["pageCount"].ToString(); currentpage.Value = pageIndex.ToString(); ControlManager(pageIndex, Convert.ToInt32(ViewState["pageCount"])); } } }
在例中用的了XML 的讀寫檢索,數據拆分,等操作,動態的形成查詢語句,添加語句搜索語句等常用的操作語句,
最后編輯和添加頁面
前台
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="InsertInfo.aspx.cs" Inherits="ExcelToSqlserver.InsertInfo" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>手動錄入數據</title> <style type="text/css"> li { display: inline; list-style: none; display: inline; list-style: none; padding-left: 15px; } </style> <script type="text/javascript" src="Scripts/jquery-1.8.2.min.js"></script> </head> <body> <form id="form1" runat="server"> <div> <ul> <li>手動錄入數據</li> <li> <asp:Button ID="btnEnterExcel" runat="server" Text="批量導入數據" OnClick="btnEnterExcel_Click" /></li> </ul> </div> <br /> <input type="hidden" runat="server" id="hiddEname" /> <input type="hidden" runat="server" id="hiddCname" /> <input type="hidden" runat="server" id="hiddCmd" /> <input type="hidden" runat="server" id="hiddRecordId" /> <div> <table> <tbody id="tbody" runat="server"> </tbody> <tfoot> <tr> <td> <input type="reset" id="reset" value="取消" /></td> <td style="margin-left: 30px;"> <input type="button" runat="server" id="btnOK" value="添加" /> </td> </tr> </tfoot> </table> </div> </form> </body> </html> <script type="text/javascript"> var Values = ""; //檢查數據錄入是否正常 function checkInput() { $(".txtVal").each(function () { var val = $(this).val(); if (val == "") { $(this).parent("td").next(".mess").css("color", "red").html("錄入信息不能為為空"); return false; } else { $(this).parent("td").next(".mess").css("color", "green").html("已錄入信息"); Values += "'" + $(this).val() + "',"; return true; } }); } $(function () { checkInput(); $(".txtVal").blur(function () { var va = $(this).val(); if (va == "") { $(this).parent("td").next(".mess").css("color", "red").html("信息不能為空"); return false; } else { $(this).parent("td").next(".mess").css("color", "green").html("已錄入信息"); } }); $("#reset").click(function () { $(".mess").html(""); }); $("#btnOK").click(function () { //判斷數據完整性 var i = 1 * 1; var values = ""; var res =true; $(".mess").each(function () { var t = $(this).html().trim(); if (t != "已錄入信息") { var ask = confirm("第" + i + "項數據還未填寫"); res = false; return; } i++; }); //獲取數據 $(".txtVal").each(function () { values += "'" + $(this).val() + "' ¦";//防止出現逗號用特殊符號分割 }); //分解數據 if (values != "") { values = values.substring(0, values.length - 1); } //異步提交 //獲取值 var eName = $("#hiddEname").val(); var cName = $("#hiddCname").val(); var cmd = $("#hiddCmd").val(); var id = $("#hiddRecordId").val(); if (!res) return; $.get("Ajax/AjaxDateToSql.ashx", { eName: eName, cName: cName, values: values,id:id,cmd: cmd }, function (date) { if (date != "NO") { alert(date); $("#reset").click(); } else { alert("添加失敗!請檢查數據"); } }); }); }); </script>
后台
/*2014-02-27 * 動態生成界面控件接受參數錄入。 * 提供手動錄入數據 * **/ using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; // using CommonLib; namespace ExcelToSqlserver { public partial class InsertInfo : System.Web.UI.Page { XMLBase xBase = new XMLBase(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string eName = Request.QueryString["eName"].ToString(); string cName = Request.QueryString["cName"].ToString(); string cmd = Request.QueryString["cmd"].ToString(); hiddCmd.Value = cmd; hiddEname.Value = eName; hiddCname.Value = cName; if (Request.QueryString["id"]!=null) { hiddRecordId.Value = Request.QueryString["id"].ToString(); //加載數據 LoadDocument(eName, cName, hiddRecordId.Value); } else { LoadDocument(eName, cName, ""); } } } /// <summary> /// 動態創建頁面控件n /// </summary> /// <param name="eName"></param> /// <param name="cName"></param> private void LoadDocument(string eName, string cName, string id) { xBase.LoadDome(); string che = xBase.Check(eName, cName); string[] colums = che.Split('¦')[0].Split(','); string[] showInfo = che.Split('¦')[1].Split('['); //新添加 if (id == "") { for (int i = 0; i < showInfo.Length; i++) { string tr = "<tr> <td style='text-align:right;'>" + showInfo[i] + ":</td> <td><input class='txtVal' type='text' /></td> <td class='mess'></td><td><input class='colu' type='hidden' value='" + colums[i] + "' /></td> </tr>"; tbody.InnerHtml += tr; } } else if (id != "") { //獲取數據值 string values = GetModel(eName, cName, id); string[] info = values.Split('¦'); btnOK.Value = "確定修改"; for (int i = 0; i < showInfo.Length; i++) { string tr = "<tr> <td style='text-align:right;'>" + showInfo[i] + ":</td> <td><input class='txtVal' type='text' value='" + info[i + 1] + "'/></td> <td class='mess'></td><td><input class='colu' type='hidden' value='" + colums[i] + "' /></td> </tr>"; tbody.InnerHtml += tr; } } } private string GetModel(string eName, string cName, string id) { string value = ""; //獲取查詢語句 string sql = ExcelHelper.GetModelQueryString(eName, cName, Convert.ToInt32(id)); value = ExcelHelper.SelectToSqlModel(sql); return value; } protected void btnEnterExcel_Click(object sender, EventArgs e) { string eName= hiddEname.Value; string cName = hiddCname.Value; ; string url = "EnterExcel.aspx?eName=" + eName + "&cName=" + cName ; Response.Redirect(url); } } }