【问题标题】:SQL DataTable not returning SQL DataSet values C#SQL DataTable 不返回 SQL DataSet 值 C#
【发布时间】:2015-11-04 21:38:33
【问题描述】:

我正在尝试使用 C# 将 XML 文件导入 SQL 表。问题是 SQL DataSet 正在返回一个值,但由于某种原因它没有将这些值放入 SQL DataTable 中。这是我的代码:

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 中的值时,它是正确的。所以一切都是正确的,但没有工作,这令人沮丧。非常感谢任何帮助。

【问题讨论】:

  • 我看到 2 件错误的事情,您可以通过更改以下 ds.ReadXML(Server.MapPath("~state.xml"), XmlReadMode.InferSchema); dt = dsTables[0]; 来更改此设置,但您也可以在代码中出现断点.. ds 是否有初始值..?如果是这样,那么数据集的表是基于 0 的,因此您可以通过 dataset.Tables[0]` 访问它,因为您从未给 ds 提供表名,如果您这样做了,请同时显示相关/相关代码。
  • 完美!这行得通,但为什么它以前使用相同的确切代码但读取不同的 XML 文件?如果您发布答案,我会将其标记为答案。
  • 那是因为您试图以“状态”的名称访问 DataSets.DataTable,这看起来不像您命名它,因此您需要通过默认访问权限(ds.Tables[0] 和因为您没有指定 XML Schema,所以您需要使用 XmlReadMode.InferSchema 来确定架构,假设 xml 已正确格式化,但我使用此方法没有遇到任何问题

标签: c# sql-server xml datatable ado.net


【解决方案1】:
ds.ReadXML(Server.MapPath("~state.xml"), XmlReadMode.InferSchema); 
dt = ds.Tables[0];

【讨论】:

  • 非常感谢您的帮助。我真的很感激。
  • 没问题.. 我马上就看到了,谢天谢地,我很高兴我能提供帮助之前遇到了这个问题。
猜你喜欢
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多