论文部分内容阅读
摘要:.NET平台的优势结合XML技术,提供了关系数据库之间转换的可能。通过实例演示了其可行性,将SQL Server数据库转换为XML文件,继而将XML文件转换为其他关系数据库,实现了多种关系数据库之间的数据转换。
关键词:数据库转换;.NET;XML
中图分类号:TP311.13文献标识码:A 文章编号:1009-3044(2008)26-1615-02
Relational Databases Conversion Based on .NET Platform
HU Shu-gang
(Dongying Vocational College, Dongying 257091, China)
Abstract: Combining the advantages of XML technology,.NET platform provides the feasibility of data conversion between relational databases. One example demonstrated the SQL Server database can be converted to an XML file, and then the XML file can be converted to other database. It has realized the data conversion between relational databases.
Key words: database conversion; .NET; XML
1 引言
网络资源中通常包含多种格式和管理系统的关系数据库,为了实现资源的共建共享,需要完成多种数据库之间的数据转换。不同的开发商采用分布式对象技术和各自的思路来实现数据库的互操作,如OMG的CORBA技术、Sun公司的EJB/RMI和微软的.NET技术等。
2 数据库转换思路
.NET是微软公司开发的下一代基于互联网平台的软件开发构想,它提供了一个全新的编程模型。该平台建立在XML和因特网标准协议的基础上,具有平台独立性和语言独立性,它包含了强大数据库操控能力的ADO.NET。ADO.NET编程模型由一系列的数据库相关类和接口组成,运用ADO.NET技术,应用程序既能访问关系型数据库中的数据,又能访问层次化的XML数据[1]。XML是W3C发布的通用标记语言SGML的一个简化子集。它是一种存储和传输数据的行业标准格式,普遍贯穿于.NET平台,具有简单性、可扩展性、互操作性和开放性等特点,其本质特点是数据独立,它存储的数据全部是文本,而且使用标记标示,利于网络传输。XML模式提供了很强的数据类型识别功能,可正确处理各种数据类型。XML和.NET的结合为解决数据库互操作问题奠定了基础[2]。通过以上分析,可以在.NET平台上,以XML为中间数据源完成多种关系数据库之间的转换[3]。演示示例用的操作系统是Windows XP Professional,开发平台为Visual Studio 2005,示例用C#语言编写。
2.1 数据库的导入[4]
为了导入SQLServe数据库,先用Connection对象连接数据库,演示示例中用SqlConnection连接了服务器METC\SQLEXPRESS的数据库books.mdf。将数据库读入DataSet。DataSet对象主要存放数据库的DataTable的对象,可以使用DataAdapter建立DataSet对象。尽管DataSet可以存储数据,但仍需要使用DataAdapter对象来创建和初始化各种表,还需要使用Fill()方法来把查询结果移入到DataSet中去,再将数据写入到XML文件。关键源代码如下。
String strTableName = "books";
String strConnection = "server=METC\\SQLEXPRESS;database=books;uid=sa;pwd=;trusted_connection=yes ";
String strSql = "select * from " strTableName;
SqlConnection objConn = new SqlConnection(strConnection);
SqlDataAdapter objAdapter = new SqlDataAdapter(strSql, objConn);
DataSet objDSet = new DataSet();
objAdapter.Fill(objDSet, "temp");
XmlTextWriter objXmlWriter;
String strtemp1 = Request.PhysicalApplicationPath;
String strpath = strtemp1 "newxml.xml";
objXmlWriter = new XmlTextWriter(strpath, null);
objXmlWriter.WriteStartDocument();
objXmlWriter.WriteStartElement("xml");
for (int i = 0; i < objDSet.Tables["temp"].Rows.Count; i )
{
objXmlWriter.WriteStartElement("menu");
for (int j = 0; j < objDSet.Tables["temp"].Columns.Count; j )
{
objXmlWriter.WriteAttributeString(objDSet.Tables["temp"].Columns[j].ColumnName, objDSet.Tables["temp"].Rows[i][j].ToString());
}
objXmlWriter.WriteEndElement();
}
objXmlWriter.WriteEndElement();
objXmlWriter.WriteEndDocument();
objXmlWriter.Close();
2.2 數据的导出[5-6]
以下演示示例是将以上创建的“newxml.xml”文件转换为Access数据库demo.mdb中的一个表“newxml”。首先建立与目标数据库的连接,也就是通过OLE DB Provider提供的OleDBConnection对象建立与Access数据库demo.mdb的连接。当然,该示例也可通过OLE DB Provider提供的其他连接数据库的对象来连接Oracle、Sybase或DB2这样的数据库以及Excel表格。以下关键源代码部分省略了命名空间的引用、系统自生成代码和对数据库中表是否建立的检查部分。
private void TableCheck()
{ OleDbConnection oledbConn = new OleDbConnection(textBoxOleDb.Text);
Try
{ oledbConn.Open();
DataTable schemaTable = oledbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {null, null, tableName, "TABLE"});
String sqlCmd = "";
if(schemaTable.Rows.Count < 1)
{sqlCmd = "create table " tableName " (";
for(int i = 0;i < dataTableXml.Columns.Count;i )
{sqlCmd = sqlCmd dataTableXml.Columns[i].ColumnName.ToString() " char(100),";}
sqlCmd= sqlCmd .Substring(0,sqlCmd.Length - 1) ");";
OleDbCommand oledbCmd = new OleDbCommand(sqlCmd,oledbConn);
oledbCmd.ExecuteNonQuery();}
}
catch
{Message.Text = "数据库不存在或无法创建表.";}
finally
{oledbConn.Close();}
}
private void TableInsert()
{ OleDbConnection oledbConn = new OleDbConnection(textBoxOleDb.Text);
try
{ oledbConn.Open();
foreach(DataRow dr in dataTableXml.Rows)
{ string sqlCmd = "insert into [" tableName "] (";
for(int i = 0;i < dataTableXml.Columns.Count;i )
{sqlCmd = sqlCmd dataTableXml.Columns[i].ColumnName.ToString() ",";}
sqlCmd= sqlCmd.Substring(0,sqlCmd.Length - 1) ") values (";
for(int x = 0;x < dataTableXml.Columns.Count;x )
{sqlCmd = sqlCmd "’" dr[x].ToString().Replace("’","’’") "’,";}
sqlCmd = sqlCmd.Substring(0,sqlCmd.Length - 1) ");";
OleDbCommand oledbCmd = new OleDbCommand(sqlCmd,oledbConn);
oledbCmd.ExecuteNonQuery();
}
}
}
3 結束语
通过以上实例,演示了以XML为中间转换数据源,在.NET平台上方便地完成异构关系数据库之间的数据转换和共享。基于.NET平台,充分利用XML技术的优势,来解决异构数据库集成的问题,能够给用户提供一个透明的全局数据库,方便用户的使用,还使得系统在可扩展性、安全性、可维护性等方面有所提高。
参考文献:
[1] Lair R, Lefbvre J.ASP.NET开发人员手册[M].张俊,译.北京:电子工业出版社,2002:38-39,169-193,246-488.
[2] Bray T, Paoli J, Sperberg-McQueen C M, et al.XML标准[EB/OL].[2006-08-16].http://www.w3.org/TR/2006/REC-xml-20060816/.
[3] 石玉晶,牛存良,马新娜.使用XML进行异构数据库间数据传送[J].现代计算机,2003,19(11):79-80.
[4] 吕品,夏红霞,李明.异构数据库互操作平台的开发研究[J].武汉理工大学学报,2003,25(1):35-37.
[5] 李应伟,姚素霞,景丽.ASP.NET数据库高级教程(C#篇)[M].北京:清华大学出版社,2004:44-58,116-140.
[6] 郭广军,刘凤龙,胡玉平..NET中基于XML的非连接数据访问与同步技术研究[J].现代计算机,2005,(4):4-9.
关键词:数据库转换;.NET;XML
中图分类号:TP311.13文献标识码:A 文章编号:1009-3044(2008)26-1615-02
Relational Databases Conversion Based on .NET Platform
HU Shu-gang
(Dongying Vocational College, Dongying 257091, China)
Abstract: Combining the advantages of XML technology,.NET platform provides the feasibility of data conversion between relational databases. One example demonstrated the SQL Server database can be converted to an XML file, and then the XML file can be converted to other database. It has realized the data conversion between relational databases.
Key words: database conversion; .NET; XML
1 引言
网络资源中通常包含多种格式和管理系统的关系数据库,为了实现资源的共建共享,需要完成多种数据库之间的数据转换。不同的开发商采用分布式对象技术和各自的思路来实现数据库的互操作,如OMG的CORBA技术、Sun公司的EJB/RMI和微软的.NET技术等。
2 数据库转换思路
.NET是微软公司开发的下一代基于互联网平台的软件开发构想,它提供了一个全新的编程模型。该平台建立在XML和因特网标准协议的基础上,具有平台独立性和语言独立性,它包含了强大数据库操控能力的ADO.NET。ADO.NET编程模型由一系列的数据库相关类和接口组成,运用ADO.NET技术,应用程序既能访问关系型数据库中的数据,又能访问层次化的XML数据[1]。XML是W3C发布的通用标记语言SGML的一个简化子集。它是一种存储和传输数据的行业标准格式,普遍贯穿于.NET平台,具有简单性、可扩展性、互操作性和开放性等特点,其本质特点是数据独立,它存储的数据全部是文本,而且使用标记标示,利于网络传输。XML模式提供了很强的数据类型识别功能,可正确处理各种数据类型。XML和.NET的结合为解决数据库互操作问题奠定了基础[2]。通过以上分析,可以在.NET平台上,以XML为中间数据源完成多种关系数据库之间的转换[3]。演示示例用的操作系统是Windows XP Professional,开发平台为Visual Studio 2005,示例用C#语言编写。
2.1 数据库的导入[4]
为了导入SQLServe数据库,先用Connection对象连接数据库,演示示例中用SqlConnection连接了服务器METC\SQLEXPRESS的数据库books.mdf。将数据库读入DataSet。DataSet对象主要存放数据库的DataTable的对象,可以使用DataAdapter建立DataSet对象。尽管DataSet可以存储数据,但仍需要使用DataAdapter对象来创建和初始化各种表,还需要使用Fill()方法来把查询结果移入到DataSet中去,再将数据写入到XML文件。关键源代码如下。
String strTableName = "books";
String strConnection = "server=METC\\SQLEXPRESS;database=books;uid=sa;pwd=;trusted_connection=yes ";
String strSql = "select * from " strTableName;
SqlConnection objConn = new SqlConnection(strConnection);
SqlDataAdapter objAdapter = new SqlDataAdapter(strSql, objConn);
DataSet objDSet = new DataSet();
objAdapter.Fill(objDSet, "temp");
XmlTextWriter objXmlWriter;
String strtemp1 = Request.PhysicalApplicationPath;
String strpath = strtemp1 "newxml.xml";
objXmlWriter = new XmlTextWriter(strpath, null);
objXmlWriter.WriteStartDocument();
objXmlWriter.WriteStartElement("xml");
for (int i = 0; i < objDSet.Tables["temp"].Rows.Count; i )
{
objXmlWriter.WriteStartElement("menu");
for (int j = 0; j < objDSet.Tables["temp"].Columns.Count; j )
{
objXmlWriter.WriteAttributeString(objDSet.Tables["temp"].Columns[j].ColumnName, objDSet.Tables["temp"].Rows[i][j].ToString());
}
objXmlWriter.WriteEndElement();
}
objXmlWriter.WriteEndElement();
objXmlWriter.WriteEndDocument();
objXmlWriter.Close();
2.2 數据的导出[5-6]
以下演示示例是将以上创建的“newxml.xml”文件转换为Access数据库demo.mdb中的一个表“newxml”。首先建立与目标数据库的连接,也就是通过OLE DB Provider提供的OleDBConnection对象建立与Access数据库demo.mdb的连接。当然,该示例也可通过OLE DB Provider提供的其他连接数据库的对象来连接Oracle、Sybase或DB2这样的数据库以及Excel表格。以下关键源代码部分省略了命名空间的引用、系统自生成代码和对数据库中表是否建立的检查部分。
private void TableCheck()
{ OleDbConnection oledbConn = new OleDbConnection(textBoxOleDb.Text);
Try
{ oledbConn.Open();
DataTable schemaTable = oledbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {null, null, tableName, "TABLE"});
String sqlCmd = "";
if(schemaTable.Rows.Count < 1)
{sqlCmd = "create table " tableName " (";
for(int i = 0;i < dataTableXml.Columns.Count;i )
{sqlCmd = sqlCmd dataTableXml.Columns[i].ColumnName.ToString() " char(100),";}
sqlCmd= sqlCmd .Substring(0,sqlCmd.Length - 1) ");";
OleDbCommand oledbCmd = new OleDbCommand(sqlCmd,oledbConn);
oledbCmd.ExecuteNonQuery();}
}
catch
{Message.Text = "数据库不存在或无法创建表.";}
finally
{oledbConn.Close();}
}
private void TableInsert()
{ OleDbConnection oledbConn = new OleDbConnection(textBoxOleDb.Text);
try
{ oledbConn.Open();
foreach(DataRow dr in dataTableXml.Rows)
{ string sqlCmd = "insert into [" tableName "] (";
for(int i = 0;i < dataTableXml.Columns.Count;i )
{sqlCmd = sqlCmd dataTableXml.Columns[i].ColumnName.ToString() ",";}
sqlCmd= sqlCmd.Substring(0,sqlCmd.Length - 1) ") values (";
for(int x = 0;x < dataTableXml.Columns.Count;x )
{sqlCmd = sqlCmd "’" dr[x].ToString().Replace("’","’’") "’,";}
sqlCmd = sqlCmd.Substring(0,sqlCmd.Length - 1) ");";
OleDbCommand oledbCmd = new OleDbCommand(sqlCmd,oledbConn);
oledbCmd.ExecuteNonQuery();
}
}
}
3 結束语
通过以上实例,演示了以XML为中间转换数据源,在.NET平台上方便地完成异构关系数据库之间的数据转换和共享。基于.NET平台,充分利用XML技术的优势,来解决异构数据库集成的问题,能够给用户提供一个透明的全局数据库,方便用户的使用,还使得系统在可扩展性、安全性、可维护性等方面有所提高。
参考文献:
[1] Lair R, Lefbvre J.ASP.NET开发人员手册[M].张俊,译.北京:电子工业出版社,2002:38-39,169-193,246-488.
[2] Bray T, Paoli J, Sperberg-McQueen C M, et al.XML标准[EB/OL].[2006-08-16].http://www.w3.org/TR/2006/REC-xml-20060816/.
[3] 石玉晶,牛存良,马新娜.使用XML进行异构数据库间数据传送[J].现代计算机,2003,19(11):79-80.
[4] 吕品,夏红霞,李明.异构数据库互操作平台的开发研究[J].武汉理工大学学报,2003,25(1):35-37.
[5] 李应伟,姚素霞,景丽.ASP.NET数据库高级教程(C#篇)[M].北京:清华大学出版社,2004:44-58,116-140.
[6] 郭广军,刘凤龙,胡玉平..NET中基于XML的非连接数据访问与同步技术研究[J].现代计算机,2005,(4):4-9.