2015-11-04 42 views
1

我想使用C#将XML文件导入到SQL表中。问题是SQL DataSet正在返回一个值,但由于某些原因,它并未将这些值放入SQL DataTable中。这里是我的代码:SQL DataTable不返回SQL数据集值C#

using(SqlConnection con = new SqlConnection(connString)) 
{ 
    ds.ReadXml(Server.MapPath("~/state.xml")); 
    DataTable dt = new DataTable(); 

    dt = ds.Tables["state"]; 
    con.Open(); 

    using(SqlBulkCopy bc = new SqlBulkCopy(con)) 
    { 
      bc.DestinationTableName = "StateIncorporated"; 
      bc.ColumnMappings.Add("name", "State"); 
      bc.ColumnMappings.Add("abbreviation", "Abbreviation"); 
      bc.ColumnMappings.Add("country_id", "Country_ID"); 
      bc.WriteToServer(dt); 
    } 
} 

我已经使用这个完全相同的代码约上几个小时前与另一个XML文件,它完美地工作。这个新的XML文件的写法与之前的相同。当我在Visual Studio中调试并检查DataSet中的值时,它是正确的。所以一切都是正确的,但没有工作,这是令人沮丧的。任何帮助深表感谢。

+0

我看到2个东西错可以通过改变以下 'ds.ReadXML(使用Server.Mappath( “〜state.xml”),XmlReadMode.InferSchema)改变这种;'' DT = dsTables [0 ];'也当你,但在代码中断点..'ds'有一个初始值..?如果是这样,那么数据集的表为'0',因此您可以通过dataset.Tables [0]来访问它,因为如果您确实需要显示相关/相关代码,您从未给出表名。 – MethodMan

+0

完美!这工作,但它为什么以前使用相同的确切代码,但阅读不同的XML文件?如果您发布答案,我会将其标记为答案。 – bds89

+0

这是因为您试图通过名称为“state”的名称来访问DataSets.DataTable,该名称看起来并不像您命名的那样,因此您需要通过默认访问“ds.Tables [0]”来执行此操作,因为您不要指定'XML Schema'你需要使用'XmlReadMode.InferSchema'来确定模式,假设xml已经被正确格式化,但是我没有遇到任何使用这个惯例的问题 – MethodMan

回答

0
ds.ReadXML(Server.MapPath("~state.xml"), XmlReadMode.InferSchema); 
dt = ds.Tables[0]; 
+0

非常感谢你的帮助。对此,我真的非常感激。 – bds89

+0

不是问题..我很高兴看到那种感觉很好,我很高兴能够得到帮助。 – MethodMan