原文:http://aspalliance.com/articleViewer.aspx?aId=477&pId=-1 作者:Andrew Mooney 翻譯:孟子E章 [下載源代碼http://aspalliance.com/download/477/ASPAlliance477.zip] Xml2OleDb簡介 XML是互聯網共享數據的最好的方法,XML格式的數據可以很輕松的集成到不同的Web應用中去。但如果你想將XML文件插入到數據庫,怎么辦?Xml2OleDb將向您說明往OleDb數據庫,比如SQL Server, Access, Excel, Visual FoxPro, FoxPro, and dBase等插入XML文件的數據是如何輕松。 首先,將XML文件裝載進DataSet,并得到第一個表,這個表就是我們要加入到數據庫的DataTable;接下來,去除XML文件的擴展名,文件名字去掉擴展名將是我們數據庫中使用的表名。如果XML格式不準確,將會報告錯誤,源代碼中有XML文件格式的例子。參見Authors.xml // 裝載我們提交的XML文件到DataSet dataSetXml.ReadXml(HttpContext.Current.Server.MapPath(textBoxXml.Text)); // 得到DataSet中的第一個表 dataTableXml = dataSetXml.Tables[0]; // 生成表名 tableName = textBoxXml.Text.Substring(0,textBoxXml.Text.Length -4);
一旦XML裝載成功,首先檢查數據表是否有數據(rows),接下來檢查數據庫是否存在表,如果不存在就創建一個;然后將數據從XML插入到數據庫中。 // 檢查是否有數據存在(rows) if(dataTableXml.Rows.Count > 0)
創建數據庫表 創建數據庫連接,得到我們要添加表的數據庫架構信息。 // 創建數據庫連接,打開數據庫,得到數據庫表的架構信息 OleDbConnection oledbConn = new OleDbConnection(textBoxOleDb.Text); oledbConn.Open(); DataTable schemaTable = oledbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {null, null, tableName, "TABLE"});
// 檢查表是否存在,如果存在在DataTable中將有一條記錄 if(schemaTable.Rows.Count < 1) sqlCmd = "create table " + tableName + " ("; for(int i = 0;i < dataTableXml.Columns.Count;i++) { // 添加列text/string type 長度 100 sqlCmd = sqlCmd + dataTableXml.Columns[i].ColumnName.ToString() + " char(100),"; } sqlCmd = sqlCmd .Substring(0,sqlCmd.Length - 1) + ");"; OleDbCommand oledbCmd = new OleDbCommand(sqlCmd,oledbConn); oledbCmd.ExecuteNonQuery();
添加XML數據到數據庫 // 遍歷DataTable中的Rows foreach(DataRow dr in dataTableXml.Rows) { string sqlCmd = "insert into [" + tableName + "] ("; // 遍歷Datatable的列 for(int i = 0;i < dataTableXml.Columns.Count;i++) { // 添加column name sqlCmd = sqlCmd + dataTableXml.Columns[i].ColumnName.ToString() + ","; } sqlCmd = sqlCmd.Substring(0,sqlCmd.Length - 1) + ") values ("; // 遍歷 DataTable columns for(int x = 0;x < dataTableXml.Columns.Count;x++) { // 添加column value到row sqlCmd = sqlCmd + "'" + dr[x].ToString().Replace("'","''") + "',"; } sqlCmd = sqlCmd.Substring(0,sqlCmd.Length - 1) + ");"; OleDbCommand oledbCmd = new OleDbCommand(sqlCmd,oledbConn); oledbCmd.ExecuteNonQuery(); } 注意的問題: 測試時先下載源代碼,創建一個空的數據庫,設置可修改權限Database.mdb,Database.xls,對FoxPro/dBase 創建空目錄 連接字符串例子: Access: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\database.mdb; Excel: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\database.xls;Extended Properties=Excel 8.0; FoxPro/dBase: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\data;Extended Properties=dBASE IV; SQL Server: Provider=SQLOLEDB; Data Source=localhost; Initial Catalog=database;User ID=sa;Password=;
|