首先,將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=;