2010-07-06 80 views
0

我在Microsoft SQL數據庫中有幾個數據表。我使用dataadapter獲取這些數據並將其放入數據集中。在此之後,我想改變一些值,比如我想改變爲:「Na/Na」。現在問題在於,這個列的正常類型是INT。所以它給了我一個錯誤。數據集類型問題

有沒有一種方法可以確保所有列都將STRING作爲其類型?或者我可以確保數據表的模式沒有被使用,我知道我可以在C#中自己創建所有的列,然後通過查詢來獲取值,但是這樣做會很有效。

+0

您是否需要將此值保存到數據庫中,或者只是需要它進行顯示? – Oded 2010-07-06 08:09:39

+0

你真的認爲你應該這樣做嗎?這是可能的,我可以寫出好的解決方案,但我不會。我真的建議你找到你想要做的替代方案。 – 2010-07-06 08:15:14

+0

我得到了一些值,我想要「規範」,這意味着我想看看值是否在一定的值。然後我會給單元格一個真實的或者錯誤的。這只是爲了顯示,但之後我將只使用字符串類型在數據庫中創建新的數據表。並把新的「specilized」表放回到數據庫中。 – Julian 2010-07-06 08:15:16

回答

0

您可以嘗試克隆DataTable並更改每列的數據類型,如this後的建議。 (滾動大約一半的答案)。

另一種替代方法是更改​​(或創建一個)存儲過程,以獲取您的數據並使其返回所需的正確「Na/Na」類型值。

+0

第一個解決方案聽起來不錯,我想我會爲那個解決方案。我知道我正在做的事情不是100%,因爲它應該是。但是我從公司獲得各種愚蠢的價值觀,需要從中獲得一些體面的東西。 – Julian 2010-07-06 08:20:10

0

這只是一列導致你的問題?在將它發送到C#之前,您總是在databse中將其轉換爲nvarchar或其他東西。然後,列類型將是一個字符串。或者,你幾乎可以編寫一些代碼來查看列的類型,如果它找到整數列,則向DataTable添加一個新列並將數據複製到它。即將到來的危險接近你自己爲所有人制作專欄的建議。

最後,如果你的整數實際上限制在一定的範圍內(即它們總是正的),那麼你可以用一個魔術值(如-1)來表示N/A,然後用你用來處理這個結果的任何代碼確定你在做東西之前就認識到了魔法價值。

我不認爲(儘管我會很高興能夠糾正),您可以更改列的類型並讓所有當前值自動轉換。

+0

我已經考慮過你的解決方案,但問題是這些表中有一些-1值,也可能是真或假。 – Julian 2010-07-06 08:16:48

1

我可以建議一種方式,但它並不完美。 方法是在查詢或存儲過程中將字段強制轉換爲varchar。在存儲過程中,您可以更好地(如果可能)在MS SQL Server端進行「Na/Na」更改。

+0

這聽起來不錯,我希望dataadapter把所有的值放入數據集中作爲datatype.String。 – Julian 2010-07-06 08:17:40

0

您是否在使用「輸入數據集」,並且您只需要在某些場合顯示「Na/Na」?

然後你就可以將屬性很容易地添加到分部類的DataTable的是一個字符串,然後返回你需要顯示的內容:

public partial class DataSet1 { 
    partial class DataTable1DataTable 
    { 
     public string MyStringColumn { 
      get { 
       return IntColumn <= 0 ? "Na/Na" : IntColumn.ToString(); 
      } 
     } 
    } 
} 
+0

對不起,如果你沒有閱讀我以前的評論。但我也需要稍後再儲存它。發現上面貼出的其他解決方案看起來不錯,而不是最「乾淨」的方式去做,但是是的。 – Julian 2010-07-06 08:27:14

0

您不能更改列的數據類型的表具有後已經充滿了數據。 因此,您需要首先通過添加C#中的列來定義數據表。 但是,仍然可以使用adapter.Fill命令,但使用第二個參數來指定要填入數據集的DataTable的名稱。

DataSet DS = new DataSet(); 
DataTable DT = new DataTable("Table1"); 
DT.Columns.Add(new DataColumn("column1", typeof(string))); 
DS.Tables.Add(DT); 

adapter.Fill(ds , "Table1"); 
+0

感謝您的幫助!看看我使用的另一種解決方案,它運行良好,對我的表格不太慢,並解決了問題。 – Julian 2010-07-06 08:32:36