2015-11-04 34 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