2016-08-01 38 views
2

我有一個包含日期的表格,以及關於該日期的不同數據,如下所示。爲什麼我的tableadaptor在我的日期列上強制強制轉換爲字符串

WKDWKDDATE8 WKDDAYNM WKDAGENO WKDDAYNO WKDDATE6 WEEKNO WEEKRANGE  AWEEK 
2019-05-15 WEDNESDAY 43580  3   AJ0515  384  05/12 - 05/18 NULL 
2019-05-16 THURSDAY 43581  4   AJ0516  384  05/12 - 05/18 NULL 

和繼承人什麼我的表看起來像

CREATE TABLE [dbo].[WKD](
[WKDDATE8] [date] NOT NULL, 
[WKDDAYNM] [varchar](10) NOT NULL, 
[WKDAGENO] [int] NULL, 
[WKDDAYNO] [int] NULL, 
[WKDDATE6] [varchar](6) NOT NULL, 
[WEEKNO] [int] NULL, 
[WEEKRANGE] [varchar](20) NULL, 
[AWEEK] [varchar](1) NULL, 

,你可以看到我的WKDDATE8字段是Date。 在我的C#應用​​程序中,即時通訊使用tableadaptors通過WKDDATE8使用SELECT * FROM WKD WHERE WKDDATE8 = @WKDDATE8來查詢此表,但由於某種原因,我的表需要字符串http://imgur.com/a/cO5FA

現在,這是它的地方。我可以手動將設計器從字符串更改爲datetime並運行,它工作正常,但後來我再次運行它,並且由於查詢想要一個字符串,但我得到一個構建錯誤,但是,如果我讓它作爲一個字符串,我得到明顯的cannot convert from 'System.DateTime' to 'string'

我完全傻眼了,失去了爲什麼我的程序想要一個字符串。 E:這是導致我問題的代碼。我沒有寫這個代碼,它是生成的。改變是毫無意義的,因爲它會改變回到第二內建,我可以看到它鑄造我列一個字符串時,它真的不應該

 [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] 
    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] 
    [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)] 
    public virtual CACTUSDataSet.WKDDataTable GetDataByWKD8(string WKDDATE8) { 
     this.Adapter.SelectCommand = this.CommandCollection[1]; 
     if ((WKDDATE8 == null)) { 
      throw new global::System.ArgumentNullException("WKDDATE8"); 
     } 
     else { 
      this.Adapter.SelectCommand.Parameters[0].Value = ((string)(WKDDATE8)); 
     } 
     CACTUSDataSet.WKDDataTable dataTable = new CACTUSDataSet.WKDDataTable(); 
     this.Adapter.Fill(dataTable); 
     return dataTable; 
    } 
+0

哪裏是源代碼? – Drew

+0

確保您的TableAdaptor中的列已設置爲「DateTime」類型。如果您使用的是可視化編輯器,只需單擊列名並在屬性窗口中應該有一個類型選項。 –

+0

@BenAbraham它被設置爲'System.DateTime'因爲它應該是 – Multinerd

回答

3

DataSet設計器創建日期參數字符串參數。

看看你的DataSet,對於表格適配器和GetDataByWKD8命令。在參數,檢查的@WKDDATE8DbType是一個字符串類型一樣AnsiString然後更改DbtypeDateProviderTypeDateTime,那麼你的填充命令將接受DateTime類型的輸入。

突出顯示設計器中的查詢並查看屬性選項卡來執行此操作。只需點擊Properties集合,就會得到一個DbType設置爲AnsiString的對話框。如果您需要那個,您會在列表底部附近找到DateTime2。

enter image description here

+0

這並沒有解決設計師的問題 - 我認爲這是一個近期的變化,因爲我遇到了傳統XSD的這個問題,這很好。現在所有的DateTime2列都會發生這種情況,無論我做什麼手冊。它很煩人。 –

+0

沒關係:這個答案澄清了它 - http:// stackoverflow。com/questions/33888920/correct-parameter-types-for-select-queries-that-use-table-valued-valued函數 –

+0

當然你不應該改變xml或c#代碼,我也是指使用設計器:) –

相關問題