以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML 与 数据库 』  (http://bbs.xml.org.cn/list.asp?boardid=17)
----  在.net中实现XML数据的存储和查询出错,请教!  (http://bbs.xml.org.cn/dispbbs.asp?boardid=17&rootid=&id=31477)


--  作者:sunmcc
--  发布时间:4/28/2006 3:41:00 PM

--  在.net中实现XML数据的存储和查询出错,请教!
我是xml的初学者,正在尝试基于sql2005数据库,在c#中实现xml数据库的写入和查询,写了几个测试程序都出错,请教大家.

--  作者:sunmcc
--  发布时间:4/28/2006 3:57:00 PM

--  
1.数据插入
表名:metaNodes2   (列 id 数据类型(nchar(10);
                            列 xcol 数据类型(xml);
                            列 metaId 数据类型(nchar(10))
程序实现:
string myConnectionString = "Data Source=MCC\\MCC;Initial Catalog=demodb;uid='meng';pwd='meng'";
   SqlConnection myConnection = new SqlConnection(myConnectionString);
   myConnection.Open();    
  
   string myQuery = "INSERT INTO metaNodes2 " +
    " SELECT xCol " +
    " FROM    (SELECT *     " +
    " FROM OPENROWSET (BULK '" + Directory.GetParent(Directory.GetParent(Directory.GetCurrentDirectory().ToString()).ToString()).ToString() + "\\bin\\debug\\plant_catalog.xml', SINGLE_CLOB)  " +
    " AS xCol) AS R(xCol) ";
       
    
   try
   {
    SqlCommand myCommand = new SqlCommand(myQuery, myConnection);
    myCommand.ExecuteNonQuery();
     
    
    MessageBox.Show("Inserted Successfully!", "Information");
   }
   catch (Exception e1)
   {
    MessageBox.Show(e1.ToString());
   }

这里使用了大容量数据加载,返回错误:出现大容量数据加载转换错误.
如果我将xml文件换成另外一个文件,就可以成功插入数据库.
我查找了一些资料,说用xmlTextWriter生成的文件编码类型为:utf-16,而BULK默认识别utf-8,不知道是否是这个原因,
另外,对该出错的xml文件,我使用.net05的方法,先使用xmlReader读入,再insert同样成功.
请教明白人指点一下,谢啦

[此贴子已经被作者于2006-4-28 16:19:36编辑过]

--  作者:sunmcc
--  发布时间:4/28/2006 4:25:00 PM

--  
2.数据查询
程序代码:
string myConnectionString = "Data Source=MCC\\MCC;Initial Catalog=metaMis;uid='meng';pwd='meng'";
   SqlConnection myConnection = new SqlConnection(myConnectionString);
   myConnection.Open();
   string x2="dfg";
   string myQuery = "SELECT metaId FROM metaNodes2 WHERE xCol.exist ('/VectorMetadata/identificationInfo/citationInfo[author = "+x2+"') = 1";
   //string myQuery="select metaId from metanodes2 where id='3'";
   try
   {
    SqlCommand myCommand = new SqlCommand(myQuery, myConnection);
   

    SqlDataReader myReader= myCommand.ExecuteReader();
    
    while (myReader.Read ())
    {
     textBox1.Text=(myReader.GetString(0));
    }

在.net05下却报错:set设置不正确,未使用正确的xml索引.

然而,在sql2005中运行:    
CREATE PRIMARY XML INDEX idx_xCol on metaNodes2 (xCol)
                      CREATE XML INDEX idx_xCol_Value on metaNodes2 (xCol)
                      USING XML INDEX idx_xCol FOR VALUE

                      SELECT metaId FROM metaNodes2 WHERE xCol.exist     ('/VectorMetadata/identificationInfo/citationInfo[author = "dfg"]') = 1

查询语句,没有问题.


--  作者:sunmcc
--  发布时间:4/30/2006 9:15:00 AM

--  
哎,问题问了几天也没人回,自己搞定了.
第一个数据插入把CLOB改成BLOB,因为我原先要放到数据库中的文件基于二进制.
第二个sql语句有问题,只是转义符没弄好,string myQuery = "SELECT metaId FROM metaNodes2 WHERE xCol.exist ('/VectorMetadata/identificationInfo/citationInfo[author = "+x2+"]') = 1";
改成: SELECT metaId FROM metanodes2 WHERE xCol.exist ('/VectorMetadata/identificationInfo/citationInfo[author ="+"\""+ x2+"\"" +"]') = 1


--  作者:cozywindlxfljm
--  发布时间:11/10/2006 9:25:00 AM

--  
朋友,有相关这方面的资料吗?给我发一份吧,不盛感激 xiangfenglv@sohu.com
--  作者:msnow
--  发布时间:12/21/2006 7:04:00 PM

--  
高手,给我发一份 吧, hswmxr@tom.com
--  作者:aman0223
--  发布时间:3/31/2007 9:58:00 PM

--  
发份给我啊!!!
meiman0223@sina.com
meiman0223@sina.com
--  作者:zh_star
--  发布时间:4/24/2007 9:33:00 PM

--  
朋友发一份给我吧272505678@qq.com不胜感激
--  作者:kxc1984
--  发布时间:12/18/2007 3:44:00 PM

--  
高手,你在做什么东西啊?能给俺发份看看吧。谢了。cui5271@163.com
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
91.797ms