急死了,搞了一天没搞定,看尽了CSDN上的问题也没有试成功,各位老大帮忙啊!!! ds.ReadXml("c:\\testxml",XmlReadMode.ReadSchema);那来的文件??没有读到数据,哪能更新呀 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <?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文件的内容 to derek我用了SqlCommandBuilder..还要updatecommand吗??另外,shippers.表有主键.... 不好意思..上面代码我少写了一行...在sqlAdapter.Fill(ds);后面ds.AcceptChanges();出错信息是..Concurrency violation: the UpdateCommand affected 0 records. 我的本意是想用textxml.xml中的数据来更新库里的数据,可怎么都不行,后来想用直接修改的方法来更新数据库试一下,结果也不行..那位兄弟帮一下吧.. 花了不少的时间,希望对楼主有用http://expert.csdn.net/Expert/topic/1872/1872523.xml?temp=.1299402hope it helps to tjq_tang先谢谢兄弟你,你的这个贴子我看了,你的那个添加的操作我实现了,成功..可这个更新的我怎么也试不成功..急死了..就是不行..老出上面的出错信息..不明白啊!! 我没有看见你的SqlCommandBuilder里有Sql语句? to ljj77(小妖) 你怎么看的???那个语句应该是自己生成的..跟踪时你应该能看到. 楼主 sqlAdapter与c:\test.xml一点关系都没有.怎么能够更新啊.我见过的使用xml文件更新数据要使用xml文件流对比来进行数据更新.不知道大伙还有什么好的办法没有? to tjq_tang问题是..我下面自己写了更新语句他也不更新..为什么呢?还报那个错..为什么呢? 楼主.下面是我测试的语句.我这里是成功了的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 经验:更新或删除不成功的原因有:1.表名或字段名与系统冲突。如:表名为table2.字段名中至少一个要设置为主鍵。希望以上建议对您有用。 to tjq_tang(重新开始) 再次感谢!你给的这篇文章http://www.csdn.net/develop/read_article.asp?id=18940打不开啊...以下是提示..这篇文章还没有审批通过,请稍后……(说明:推荐给《程序员》杂志的文章只有没被采用,或者已经在杂志上发表了,才会审批通过。) 我导出时就是用DataSet.WriteXml(fileName,XmlWriteMode.WriteSchema)方式导出的.. //倒数据使用这个函数.然后和上面的代码一起测试./// <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 傻傻的一问:ds.ReadXml("c:\\testxml",XmlReadMode.ReadSchema);有没有可能是c:\\text.xml写成了textxml而没读取到呢?当然我没测试过。 to tjq_tang(重新开始) 你做一下如下的测试:你将你导出的xml文件中的数据改一两个(),然后再导入,就会出现问题,我的目地是模拟接收到了更改了的数据的xml文件.然后用这些数据来更新数据库中相应表的内容..你原来的这种方法用DataSet导入 以下代码请参考: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(); To 楼主: 你将你导出的xml文件中的数据改一两个(),然后再导入,就会出现问题,我的目地是模拟接收到了更改了的数据的xml文件.然后用这些数据来更新数据库中相应表的内容." 一两个(),"是什么意思? 我即使在更新数据前添加 ds.Tables[0].Rows[0][1] = "22"; sqlAdapter.Update(ds,"T_CodeSet"); 测试同样成功.楼主,如果你检测一下你的代码.我的代码测试确实成功.至于我的代码和你的代码差别是什么.我还没有看出来. 是这样的..下面是第一次写出来的..<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中,然后再去更新数据库..不成功.. 如何生成一个有效的updatecommand呢?不能用commandbuild自动生成吗? 将sqlCommand.Connection = sqlConn;sqlAdapter.SelectCommand = sqlCommand;放到SqlCommandBuilder(sqlAdapter)前面。 to eFine_cn() ( ) 兄弟,放前面也不行..... 前几天我也没搞清DataSet和DataAdaper是怎么样更新的,现在大约知道了一些,就是,每次对DataSet中的数据进行修改了之后,对应的RowState的状态发生变化,这时,DataAdaper才能根据需要调用Insert,Update,Delete等,所以,我想这样做也许可以,你把每一行的RowState改成Insert再更新试一试.不论是否可以,请来短消息. 紧急求助,InstallShield 问题 关于OnMouseDown事件中获取的值 未能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件。 怎么让我的控制台应用程序支持通配符命令? 中西文混排的字符能直接从 gb2312转utf8吗? 真的是一个很简单的问题啊 如何控制操作系统里现有的服务,重起,停止,暂停.... 注册帐号问题 c#中的TYPEOF的问题? SQL连接错误:参数未提供 crystal report 报 query engine error:报表文件名? 算术运算符中找不到幂(指数)运算,怎么办?
<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文件的内容
我用了SqlCommandBuilder..还要updatecommand吗??
另外,shippers.表有主键....
在
sqlAdapter.Fill(ds);后面
ds.AcceptChanges();出错信息是..Concurrency violation: the UpdateCommand affected 0 records.
http://expert.csdn.net/Expert/topic/1872/1872523.xml?temp=.1299402
hope it helps
先谢谢兄弟你,你的这个贴子我看了,你的那个添加的操作我实现了,成功..
可这个更新的我怎么也试不成功..急死了..就是不行..老出上面的出错信息..不明白啊!!
你怎么看的???那个语句应该是自己生成的..跟踪时你应该能看到.
不知道大伙还有什么好的办法没有?
问题是..我下面自己写了更新语句他也不更新..为什么呢?还报那个错..
为什么呢?
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
更新或删除不成功的原因有:
1.表名或字段名与系统冲突。如:表名为table
2.字段名中至少一个要设置为主鍵。
希望以上建议对您有用。
你给的这篇文章http://www.csdn.net/develop/read_article.asp?id=18940
打不开啊...以下是提示..这篇文章还没有审批通过,请稍后……
(说明:推荐给《程序员》杂志的文章只有没被采用,或者已经在杂志上发表了,才会审批通过。)
/// <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
ds.ReadXml("c:\\testxml",XmlReadMode.ReadSchema);
有没有可能是c:\\text.xml写成了textxml而没读取到呢?
当然我没测试过。
你做一下如下的测试:
你将你导出的xml文件中的数据改一两个(),然后再导入,就会出现问题,我的目地是模拟接收到了更改了的数据的xml文件.然后用这些数据来更新数据库中相应表的内容..你原来的这种方法用DataSet导入
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();
你将你导出的xml文件中的数据改一两个(),然后再导入,就会出现问题,我的目地是模拟接收到了更改了的数据的xml文件.然后用这些数据来更新数据库中相应表的内容.
" 一两个(),"是什么意思?
我即使在更新数据前添加 ds.Tables[0].Rows[0][1] = "22";
sqlAdapter.Update(ds,"T_CodeSet");
测试同样成功.
楼主,如果你检测一下你的代码.我的代码测试确实成功.至于我的代码和你的代码差别是什么.我还没有看出来.
下面是第一次写出来的..
<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中,然后再去更新数据库..不成功..
sqlAdapter.SelectCommand = sqlCommand;
放到SqlCommandBuilder(sqlAdapter)前面。
兄弟,放前面也不行.....
现在大约知道了一些,
就是,
每次对DataSet中的数据进行修改了之后,
对应的RowState的状态发生变化,
这时,DataAdaper才能根据需要调用Insert,Update,Delete等,
所以,
我想这样做也许可以,
你把每一行的RowState改成Insert再更新试一试.
不论是否可以,请来短消息.