ds.ReadXml("c:\\testxml",XmlReadMode.ReadSchema);那来的文件??没有读到数据,哪能更新呀

解决方案 »

  1.   

    <?xml version="1.0" standalone="yes"?>
    <NewDataSet>
      <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="zh-CN">
          <xs:complexType>
            <xs:choice maxOccurs="unbounded">
              <xs:element name="shippers">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="ShipperID" type="xs:int" minOccurs="0" />
                    <xs:element name="CompanyName" type="xs:string" minOccurs="0" />
                    <xs:element name="Phone" type="xs:string" minOccurs="0" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:schema>
      <shippers>
        <ShipperID>8</ShipperID>
        <CompanyName>xhb seven</CompanyName>
        <Phone>(503) 888-9931</Phone>
      </shippers>
    </NewDataSet>以上是textxml.xml文件的内容
      

  2.   

    to derek
    我用了SqlCommandBuilder..还要updatecommand吗??
    另外,shippers.表有主键....
      

  3.   

    不好意思..上面代码我少写了一行...

    sqlAdapter.Fill(ds);后面
    ds.AcceptChanges();出错信息是..Concurrency violation: the UpdateCommand affected 0 records.
      

  4.   

    我的本意是想用textxml.xml中的数据来更新库里的数据,可怎么都不行,后来想用直接修改的方法来更新数据库试一下,结果也不行..那位兄弟帮一下吧..
      

  5.   

    花了不少的时间,希望对楼主有用
    http://expert.csdn.net/Expert/topic/1872/1872523.xml?temp=.1299402
    hope it helps
      

  6.   

    to tjq_tang
    先谢谢兄弟你,你的这个贴子我看了,你的那个添加的操作我实现了,成功..
    可这个更新的我怎么也试不成功..急死了..就是不行..老出上面的出错信息..不明白啊!!
      

  7.   

    我没有看见你的SqlCommandBuilder里有Sql语句?
      

  8.   

    to  ljj77(小妖) 
    你怎么看的???那个语句应该是自己生成的..跟踪时你应该能看到.
      

  9.   

    楼主 sqlAdapter与c:\test.xml一点关系都没有.怎么能够更新啊.我见过的使用xml文件更新数据要使用xml文件流对比来进行数据更新.
    不知道大伙还有什么好的办法没有?
      

  10.   

    to tjq_tang
    问题是..我下面自己写了更新语句他也不更新..为什么呢?还报那个错..
    为什么呢?
      

  11.   

    楼主.下面是我测试的语句.我这里是成功了的
    DataSet ds = new DataSet();
    ds.ReadXml("c:\\T_CodeSet.xml",XmlReadMode.ReadSchema);
    OleDbDataAdapter sqlAdapter = new OleDbDataAdapter();
    OleDbCommand sqlCommand = new OleDbCommand();
    sqlCommand.CommandType = CommandType.Text;
    sqlCommand.CommandText = "select * from T_CodeSet";
    sqlCommand.Connection = m_PubConn;
    sqlAdapter.SelectCommand = sqlCommand;
    OleDbCommandBuilder  sqlCmdBuild = new OleDbCommandBuilder(sqlAdapter);
    sqlAdapter.Fill(ds); 
    sqlAdapter.Update(ds,"T_CodeSet");
    MessageBox.Show("success export table:Customers");
    和你上面的语句差不多的.你是否你的test.xml文件导出的时候是否是按规则导出?
    我这里导出的T_CodeSet.xml"是按照http://www.csdn.net/develop/read_article.asp?id=18940
    方法导出的.你试试.
    hope it helps
      

  12.   

    经验:
    更新或删除不成功的原因有:
    1.表名或字段名与系统冲突。如:表名为table
    2.字段名中至少一个要设置为主鍵。
    希望以上建议对您有用。
      

  13.   

    to  tjq_tang(重新开始) 再次感谢!
    你给的这篇文章http://www.csdn.net/develop/read_article.asp?id=18940
    打不开啊...以下是提示..这篇文章还没有审批通过,请稍后……
    (说明:推荐给《程序员》杂志的文章只有没被采用,或者已经在杂志上发表了,才会审批通过。)
      

  14.   

    我导出时就是用DataSet.WriteXml(fileName,XmlWriteMode.WriteSchema)方式导出的..
      

  15.   

    //倒数据使用这个函数.然后和上面的代码一起测试.
    /// <summary>
    /// export the table of database
    /// </summary>
    /// <param name="m_TableName">table name</param>
    /// <param name="m_FilePath">file path</param>
    /// <param name="m_PubConn">Connection of database</param>
    /// <returns></returns>
    public bool ExportTableToXml(string m_TableName,string m_FilePath,OleDbConnection m_PubConn)
    {
    try
    {
    DataSet ds = new DataSet();
    OleDbDataAdapter m_Adapter = new OleDbDataAdapter("",m_PubConn);
    m_Adapter.SelectCommand    = new OleDbCommand("select * from "+m_TableName,m_PubConn);
    m_Adapter.Fill(ds,m_TableName);
    System.IO.FileStream fs    = new System.IO.FileStream(m_FilePath,System.IO.FileMode.Create);
    ds.WriteXml(fs, XmlWriteMode.WriteSchema); 
    fs.Close();
    return true;
    }catch (System.Exception error)
    {
            MessageBox.Show(error.Message,"error",MessageBoxButtons.OK,MessageBoxIcon.Error);
    return false;
             } 
    }hope it helps
      

  16.   

    傻傻的一问:
    ds.ReadXml("c:\\testxml",XmlReadMode.ReadSchema);
    有没有可能是c:\\text.xml写成了textxml而没读取到呢?
    当然我没测试过。
      

  17.   

    to  tjq_tang(重新开始) 
    你做一下如下的测试:
    你将你导出的xml文件中的数据改一两个(),然后再导入,就会出现问题,我的目地是模拟接收到了更改了的数据的xml文件.然后用这些数据来更新数据库中相应表的内容..你原来的这种方法用DataSet导入
      

  18.   

    以下代码请参考:SqlConnection conn = new SqlConnection(connStr);
    SqlDataAdapter adpt = new SqlDataAdapter("SELECT * FROM Employee",conn);
    DataSet ds = new DataSet("abcde");conn.Open();
    adpt.Fill(ds,"Employee");string insertStr = "insert Employee(EmpID,EmpName,Age) values(@EmpID,@EmpName,@Age)";
    adpt.InsertCommand = new SqlCommand(insertStr,conn);SqlParameter parm;parm = adpt.InsertCommand.Parameters.Add(new SqlParameter("@EmpID",SqlDbType.Char));
    parm.SourceColumn = "EmpID";
    parm.SourceVersion = DataRowVersion.Current;parm = adpt.InsertCommand.Parameters.Add(new SqlParameter("@EmpName",SqlDbType.VarChar));
    parm.SourceColumn = "EmpName";
    parm.SourceVersion = DataRowVersion.Current;parm = adpt.InsertCommand.Parameters.Add(new SqlParameter("@Age",SqlDbType.Int));
    parm.SourceColumn = "Age";
    parm.SourceVersion = DataRowVersion.Current;string xmlData = "<abcde><Employee><EmpID>0011</EmpID><EmpName>aaaaaaaaa</EmpName><Age>234</Age></Employee><Employee><EmpID>0022</EmpID><EmpName>bbbbbbbb</EmpName><Age>45</Age></Employee></abcde>";System.IO.StringReader xmlSR = new System.IO.StringReader(xmlData); 
    ds.ReadXml(xmlSR, XmlReadMode.IgnoreSchema);
    try
    {
    adpt.Update(ds,"Employee");
    }
    catch(SqlException ex)
    {
    MessageBox.Show(ex.Message);
    }
    conn.Close();
      

  19.   

    To 楼主:
      你将你导出的xml文件中的数据改一两个(),然后再导入,就会出现问题,我的目地是模拟接收到了更改了的数据的xml文件.然后用这些数据来更新数据库中相应表的内容.
    "  一两个(),"是什么意思?
      我即使在更新数据前添加       ds.Tables[0].Rows[0][1] = "22";
    sqlAdapter.Update(ds,"T_CodeSet");
      测试同样成功.
    楼主,如果你检测一下你的代码.我的代码测试确实成功.至于我的代码和你的代码差别是什么.我还没有看出来.
      

  20.   

    是这样的..
    下面是第一次写出来的..
    <mytest>
        <ShipperID>1</ShipperID>
        <CompanyName>sdfsdf</CompanyName>
        <Phone>122</Phone>
      </mytest>
      <mytest>
        <ShipperID>2</ShipperID>
        <CompanyName>microsoft</CompanyName>
        <Phone>32</Phone>
      </mytest>
      <mytest>
        <ShipperID>3</ShipperID>
        <CompanyName>Ibm</CompanyName>
        <Phone>11111</Phone>
      </mytest>
    </NewDataSet>改后的..
    <mytest>
        <ShipperID>1</ShipperID>
        <CompanyName>sdfsdf</CompanyName>
        <Phone>122</Phone>
      </mytest>
      <mytest>
        <ShipperID>2</ShipperID>
        <CompanyName>mic</CompanyName>
        <Phone>32</Phone>
      </mytest>
      <mytest>
        <ShipperID>3</ShipperID>
        <CompanyName>hp</CompanyName>
        <Phone>11111</Phone>
      </mytest>
    </NewDataSet>改成这样后再用你的方法读这个xml文件到dataset中,然后再去更新数据库..不成功..
      

  21.   

    如何生成一个有效的updatecommand呢?不能用commandbuild自动生成吗?
      

  22.   

    将sqlCommand.Connection = sqlConn;
    sqlAdapter.SelectCommand = sqlCommand;
    放到SqlCommandBuilder(sqlAdapter)前面。
      

  23.   

    to  eFine_cn() ( ) 
    兄弟,放前面也不行.....
      

  24.   

    前几天我也没搞清DataSet和DataAdaper是怎么样更新的,
    现在大约知道了一些,
    就是,
    每次对DataSet中的数据进行修改了之后,
    对应的RowState的状态发生变化,
    这时,DataAdaper才能根据需要调用Insert,Update,Delete等,
    所以,
    我想这样做也许可以,
    你把每一行的RowState改成Insert再更新试一试.
    不论是否可以,请来短消息.