可以做一个类库,用xml调用
using
System.Data.Sqlcolint;
using
System.Xml;
咨询通过读取xml文件连接sqlserver数据库的问题
悬赏分:20
-
提问时间2007-11-6
16:34
我的问题:
1。连接数据库方式是个类库(做成dll文件)
2。连接数据库的登录名密码等字符串是从config.xml中读取
3。是从类库中读取还是从别的地方读取config.xml?因为在类库中有个连接数据库的语句。
4。如果连接数据库的密码错误,会自动提示连接错误,然后弹出个小窗口,修改config.xml中的数据库密码等,然后保存。这个步骤在哪里写?
===================================================================================================================
我的部分代码:
1。连接数据库的类库:
Imports
System.data.sqlclient
Public
Class
DB
'sCon为连接字符串
Private
sCon
As
String
=
"User
ID=sa;Initial
Catalog=dbname;Data
Source=(local)
"
Public
Function
GetDataTable(ByVal
strSql
As
String)
As
DataTable
Dim
myDt
As
New
DataTable
Dim
sqlConn
As
SqlConnection
=
New
SqlConnection(sCon)
Dim
myCmd
As
SqlCommand
=
New
SqlCommand(strSql,
sqlConn)
Dim
myDa
As
New
SqlDataAdapter(strSql,
sqlConn)
Try
myDa.Fill(myDt)
Catch
er
As
Exception
Finally
sqlConn.Close()
End
Try
Return
myDt
End
Function
End
Class
public
Void
ReaderXML(string
URL)//URL是XML文件的路径
{
DataSet
ds
=
new
DataSet();
ds.ReaderXml("URL");
//下面就是把这个数据集存到数据库里面
}
㈡ 如何将xml文件导入sqlserver
SQLServer2005分解并导入xml文件[@more@]
1. 一次性导入:
DECLARE @idoc int;
DECLARE @doc xml;
SELECT @doc=BulkColumn FROM OPENROWSET(BULK N'E:MStarInstryCodes.xml', SINGLE_BLOB) AS x
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT * into tmp_tab FROM OPENXML (@idoc, '/Root/Record'/',2)
WITH
(
InstryCode varchar(10)
,InstryGlobalId varchar(10)
,InstryName varchar(100)
,SectorCode varchar(10)
,SectorGlobalId varchar(10)
,SectorName varchar(100)
,SuperSectorCode varchar(10)
,SuperSectorName varchar(100)
,GroupCode varchar(10)
,GroupName varchar(100)
,CountryId varchar(3)
)
EXEC sp_xml_removedocument @idoc
select * from tmp_tab
2. 先导入到表中varchar(MAX)列,然后再用OPENXML解析,读出。
-- 使用SINGLE_CLOB参数,tmp_raw中字段为varcahr(MAX)类型
SELECT * into tmp_raw FROM OPENROWSET(BULK N'E:MStarInstryCodes.xml', SINGLE_CLOB) AS x
DECLARE @idoc int;
DECLARE @doc xml;
select @doc = BulkColumn from tmp_raw
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT top 10 * FROM OPENXML (@idoc, '/Root/Record', 1)
WITH
(
InstryCode varchar(10)
,InstryGlobalId varchar(10)
,InstryName varchar(100)
,SectorCode varchar(10)
,SectorGlobalId varchar(10)
,SectorName varchar(100)
,SuperSectorCode varchar(10)
,SuperSectorName varchar(100)
,GroupCode varchar(10)
,GroupName varchar(100)
,CountryId varchar(3)
)
EXEC sp_xml_removedocument @idoc
㈢ xml文档转换存储到sql sever数据库中
分无所谓,如果是你要的看着给吧。不知道你了解多少,我就尽量详细点,罗嗦点。
表的设计完全是根据XML节点设计的,每一个节点信息都是表的一个字段,每一个节点的属性也要是一个表的字段。
如果是用java写首先需要导入几个包
import java.sql.*; //估计一般的项目都是外包连接数据库,所以用外包数据库来讲。
import java.io.*;
import javax.xml.parsers.*; //这个包是用来解析XML的
import org.w3c.dom.*; //工厂包
import org.apache.crimson.tree.*;//这个包是建立XML的包,也可以选择不用,一般IDE不自带,需要自己导入
//类也简单写一下吧
public class XmlToSql{
public static void main(string[] args){
//根据XML节点设计出的表字段,我先假设有3个字段
String id,username,password;
//建立数据库连接,简单方法连一下吧
Class.forName("com.microsoft.jabc.sqlserver.SQLServerDriver");
Connection con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databasename="数据库名","登陆名","密码");
//建立了连接后要用工厂去获得Document,也就是你的XML
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//建立一个新工厂
DocumentBuilder builder=factory.newDocumentBuilder();//工厂建立一个builder来管理Doc
Document doc=builder.parse(new FileInputStrem(new File("*****.xml"));//把你的XML进行解析放入Document类型文档。这时候你的XML文档节点就以树的形式放入内存了(说白了就是你表的字段),下面你要什么就调用就行了。
//开始正式解析文档
NodeList nodes=doc.getElementsByTagName("a");//从英文也看的出这是把名为a的节点的信息放入NodeList容器中。NodeList就是存放节点组的容器
for(int i=0;i<nodes.getLength(),i++){ //开始循环把你的节点信息插入你的SQL表中,我只需要把你要的字段提取出来就行了。我们不是前面假定了一个属性ID,两个元素节点吗?这里就来取出
Element node=(Element)nodes.item(i); //先做个元素对象,毕竟我们要的字段都是元素节点
id=node.getAttributes().getNamedItem("id").getNodeValue(); //用这个方法取出XML中 属性ID的内容放入ID字段中,这个ID就是你SQL里的ID名了,最后插入就可以了。注意这里是提取属性的方法
username=node.getElementsBtagName("username").item(0).getFirstChild().getNode.Value();//提取元素节点username的值放入字段,.item(0)就是第一个这个字段,如果就有一个可以不要。
password=node.getElementsBtagName("password").item(0).getFirstChild().getNode.Value();//都是元素节点,所以同样的方法取出password的值
//好了我们要的3个表值都取到了,并放入了变量中。现在一个SQL语句插入表就行了,其实我很怕在JAVA中写SQL,不能格式化, .NET就方便的多。都写到这里了就写完吧
sql="insert into a values("+id+"','"+username+"'+'"password+"')";
con.createStatement().executeUpdate(sql);
}catch(Exception e{e.printStackTrace();}
}
}
//好了,你的XL信息循环插入表中了,其实XML结构很关键,这里是但节点循环,有时候出现多子节点,或者非正规体那就要根据XML的结构来循环输入了,不过大体方法和思路都是一样的。由于直接就在这里写的代码,没在IDE中写,所以括号匹配方面也许会出小问题,见谅
㈣ 什么是sqlserver
SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),那么你对sqlserver了解多少呢?以下是由我整理关于什么是sqlserver的内容,希望大家喜欢!
sqlserver的简介
SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。Microsoft SQL Server近年来不断更新版本,1996年,Microsoft 推出了SQL Server 6.5版本;1998年,SQL Server 7.0版本和用户见面;SQL Server 2000是Microsoft公司于2000年推出,目前最新版本是2015年份推出的SQL SERVER 2015。
sqlserver的特点
1.真正的客户机/服务器体系结构。
2.图形化用户界面,使系统管理和数据库管理更加直观、简单。
3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。
4.SQL Server与Windows NT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等。SQL Server也可以很好地与Microsoft BackOffice产品集成。
5.具有很好的伸缩性,可跨越从运行Windows 95/98的膝上型电脑到运行Windows 2000的大型多处理器等多种平台使用。
6.对Web技术的支持,使用户能够很容易地将数据库中的数据发布到Web页面上。
7.SQL Server提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。
SQL Server 2000与以前版本相比较,又具有以下新特性 :
1.支持XML(Extensive Markup Language,扩展标记语言)
2.强大的基于Web的分析
3.支持OLE DB和多种查询
4.支持分布式的分区视图
sqlserver的配置要求
安装、运行SQL Server 2000的硬件需求
1.计算机
Intel及其兼容计算机,Pentium 166Mz或者更高处理器或DEC Alpha和其兼容系统。
2.内存(RAM)
企业版最少64MB内存,其他版本最少需要32MB内存,建议使用更多的内存。
3.硬盘空间
完全安装(Full)需要180MB的空间,典型安装(Typical)需要170MB的空间,最小安装(Minimum)需要65MB的空间。
Sqlserver的版本
SQL Server 2000 :是Microsoft 公司推出的SQL Server 数据库管理系统,该版本继承了SQL Server 7.0 版本的优点,同时又比它增加了许多更先进的功能。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2000 的大型多处理器的服务器等多种平台使用。
SQL Server 2005 是一个全面的数据库平台,使用集成的商业智能 (BI) 工具提供了企业级的数据管理。SQL Server 2005 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
SQL Server 2005:SQL Server 2005 数据引擎是本企业数据管理解决方案的核心。此外 SQL Server 2005 结合了分析、报表、集成和通知功能。这使您的企业可以构建和部署经济有效的 BI 解决方案,帮助您的团队通过记分卡、Dashboard、Web services 和移动设备将数据应用推向业务的各个领域。
与 Microsoft Visual Studio、Microsoft Office System 以及新的开发工具包(包括 Business Intelligence Development Studio)的紧密集成使 SQL Server 2005 与众不同。无论您是开发人员、数据库管理员、信息工作者还是决策者,SQL Server 2005 都可以为您提供创新的解决方案,帮助您从数据中更多地获益。
SQL Server 2008:SQL Server 2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQL Server版本。这篇文章详细介绍了Microsoft SQL Server 2008中的新的特性、优点和功能……
微软的这个数据平台满足这些数据爆炸和下一代数据驱动应用程序的需求,支持数据平台愿景:关键任务企业数据平台、动态开发、关系数据和商业智能。
许多因素致使产生了信息存储爆炸。有了新的信息类型,例如图片和视频的数字化,和从RFID标签获得的传感器信息,公司的数字信息的数量在急剧增长。遵守规范和全球化的发展要求信息存储的安全性和在任何时候都可用。同时,磁盘存储的成本显着地降低了,使得公司投资的每一美元可以存储更多的数据。用户必须快速的在大量的数据中找到相关的信息。此外,他们想在任何设备上使用这个信息,并且计划每天使用,例如Microsoft Office系统应用程序。对数据爆炸和用户期望值的增加的管理为公司制造了许多挑战。
㈤ 从ftp上下载每天的xml文件到本地,再解析本地的xml文件中的数据并将其存入sqlserver数据库中
我给你个解析的代码吧~具体存数据库得根据实际情况来
#include "StdAfx.h"
#include "parse.h"
#include <string>
#include "stdafx.h"
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <iostream>
#include <libxml/xpath.h>
#include <libxml/xpathInternals.h>
#include <stdio.h>
#include <stdlib.h>
#include<windows.h>
using namespace std;
parse::parse()
//int parse::parsexml()
{
xmlDocPtr doc; //定义解析文档指针
xmlNodePtr curNode; //定义结点指针(你需要它为了在各个结点间移动)
xmlChar *szKey; //临时字符串变量
char *szDocName;
doc = xmlReadFile("SimACQ_Config.xml","GB2312",XML_PARSE_RECOVER); //解析文件
//检查解析文档是否成功,如果不成功,libxml将指一个注册的错误并停止。
if (NULL==doc)
{
fprintf(stderr,"Document not parsed successfully. /n");
/*return -1;*/
}
curNode = xmlDocGetRootElement(doc); //确定文档根元素
/*检查确认当前文档中包含内容*/
if (NULL == curNode)
{
fprintf(stderr,"empty document/n");
xmlFreeDoc(doc);
/*return -1;*/
}
/*在这个例子中,我们需要确认文档是正确的类型。“root”是在这个示例中使用文档的根类型。*/
if (xmlStrcmp(curNode->name, BAD_CAST "SIMCONFIG"))
{
fprintf(stderr,"document of the wrong type, root node != mail");
xmlFreeDoc(doc);
/*return -1; */
}
curNode = curNode->xmlChildrenNode;
xmlNodePtr propNodePtr = curNode;
while(curNode != NULL)
{
//取出节点中的内容
if ((!xmlStrcmp(curNode->name, (const xmlChar *)"ComConfig")))
{
xmlNodePtr comConfigPtr= curNode->children;
while(comConfigPtr!=NULL)
{
if((!xmlStrcmp(comConfigPtr->name,(const xmlChar *)"DMS")))
{
xmlChar* szAttr = xmlGetProp(comConfigPtr,BAD_CAST "IP");
IP=(char*)szAttr;
szAttr=xmlGetProp(comConfigPtr,BAD_CAST "PORT");
PORT=atoi((const char *)szAttr);
szAttr=xmlGetProp(comConfigPtr,BAD_CAST "TIMEOUT");
TIMEOUT=atoi((const char *)szAttr);
xmlFree(szAttr);
}
comConfigPtr=comConfigPtr->next;
}
}
if ((!xmlStrcmp(curNode->name, (const xmlChar *)"Log")))
{
xmlChar* szAttr = xmlGetProp(curNode,BAD_CAST "Flag");
if(szAttr!=NULL)
{
if((!xmlStrcmp(szAttr,(const xmlChar *)"True")))
{
FLAG=true;
}
else
{
FLAG=false;
}
}
szAttr = xmlGetProp(curNode,BAD_CAST "Path");
if(szAttr!=NULL)
{
PATH=(char*)szAttr;
}
xmlFree(szAttr);
}
if ((!xmlStrcmp(curNode->name, (const xmlChar *)"DMS")))
{
xmlChar* szAttr = xmlGetProp(curNode,BAD_CAST "Cache");
if(szAttr!=NULL)
{
Cache=atoi((const char *)szAttr);
}
xmlFree(szAttr);
}
if ((!xmlStrcmp(curNode->name, (const xmlChar *)"SimFile")))
{
xmlChar* szAttr = xmlGetProp(curNode,BAD_CAST "Type");
if(szAttr!=NULL)
{
if((!xmlStrcmp(szAttr,(const xmlChar *)"PlainFilm")))
{
xmlNodePtr FileNodes=curNode->children;
int i=0;
while(FileNodes!=NULL)
{
if((!xmlStrcmp(FileNodes->name,(const xmlChar *)"FILE")))
{
szAttr = xmlGetProp(FileNodes,BAD_CAST "name");
if(szAttr!=NULL)
{
/*SIM_PLAIN[i].Name=(char*)szAttr;*/
strcpy(simulation.SIM_PLAIN[i].Name,(char*)szAttr);
}
szAttr=xmlGetProp(FileNodes,BAD_CAST "sliceNum");
if(szAttr!=NULL)
{
simulation.SIM_PLAIN[i].Num=atoi((char*)szAttr);
}
i++;
}
FileNodes=FileNodes->next;
}
xmlFree(FileNodes);
simulation.SIM_PLAIN[i].flag=0;
}
if((!xmlStrcmp(szAttr,(const xmlChar *)"Spiral"))){
xmlNodePtr FileNodes=curNode->children;
int i=0;
while(FileNodes!=NULL)
{
if((!xmlStrcmp(FileNodes->name,(const xmlChar *)"FILE")))
{
szAttr = xmlGetProp(FileNodes,BAD_CAST "name");
if(szAttr!=NULL)
{
/*SIM_SPIRAL[i].Name=(char*)szAttr;*/
strcpy(simulation.SIM_SPIRAL[i].Name,(char*)szAttr);
}
szAttr=xmlGetProp(FileNodes,BAD_CAST "sliceNum");
if(szAttr!=NULL)
{
simulation.SIM_SPIRAL[i].Num=atoi((char*)szAttr);
}
i++;
}
FileNodes=FileNodes->next;
}
xmlFree(FileNodes);
simulation.SIM_SPIRAL[i].flag=0;
}
if((!xmlStrcmp(szAttr,(const xmlChar *)"axial")))
{
xmlNodePtr FileNodes=curNode->children;
int i=0;
while(FileNodes!=NULL)
{
if((!xmlStrcmp(FileNodes->name,(const xmlChar *)"FILE")))
{
szAttr = xmlGetProp(FileNodes,BAD_CAST "name");
if(szAttr!=NULL)
{
/* SIM_AXIAL[i].Name=(char*)szAttr;*/
strcpy(simulation.SIM_AXIAL[i].Name,(char*)szAttr);
}
szAttr=xmlGetProp(FileNodes,BAD_CAST "sliceNum");
if(szAttr!=NULL)
{
simulation.SIM_AXIAL[i].Num=atoi((char*)szAttr);
}
i++;
}
FileNodes=FileNodes->next;
}
xmlFree(FileNodes);
simulation.SIM_AXIAL[i].flag=0;
}
}
xmlFree(szAttr);
}
curNode = curNode->next;
}
xmlFreeDoc(doc);
/*return 0;*/
}
有什么不明白的再问吧!