2016-08-01 37 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#代码,我也是指使用设计器:) –

相关问题