为什么我的 tableadaptor 强制转换为我的日期列上的字符串
Why is my tableadaptor forcing a cast to string on my date column
我有一个 table 日期,以及关于该日期的不同数据。
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
这是我的 table 的样子
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
查询此 table,但出于某种原因,我的 table 想要一个字符串 http://imgur.com/a/cO5FA .
现在,这就是令人沮丧的地方。我可以手动将设计器从字符串更改为日期时间和 运行,它工作正常,但后来我再次 运行 它并且我得到一个构建错误,因为查询需要一个字符串,但是,如果我让它作为一个字符串,我得到了明显的 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;
}
数据集设计器为日期参数创建字符串参数。
查看 DataSet
的 table 适配器和 GetDataByWKD8
命令。在参数中,检查 @WKDDATE8
的 DbType
是否为字符串类型,如 AnsiString
然后将 Dbtype
更改为 Date
并将 ProviderType
更改为 DateTime
,那么您的填充命令将接受 DateTime
.
类型的输入
突出显示设计器中的查询并查看属性选项卡以执行此操作。只需点击 Properties 集合,您就会看到 DbType 设置为 AnsiString 的对话框。如果需要,您会在列表底部附近找到 DateTime2。
我有一个 table 日期,以及关于该日期的不同数据。
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
这是我的 table 的样子
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
查询此 table,但出于某种原因,我的 table 想要一个字符串 http://imgur.com/a/cO5FA .
现在,这就是令人沮丧的地方。我可以手动将设计器从字符串更改为日期时间和 运行,它工作正常,但后来我再次 运行 它并且我得到一个构建错误,因为查询需要一个字符串,但是,如果我让它作为一个字符串,我得到了明显的 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;
}
数据集设计器为日期参数创建字符串参数。
查看 DataSet
的 table 适配器和 GetDataByWKD8
命令。在参数中,检查 @WKDDATE8
的 DbType
是否为字符串类型,如 AnsiString
然后将 Dbtype
更改为 Date
并将 ProviderType
更改为 DateTime
,那么您的填充命令将接受 DateTime
.
突出显示设计器中的查询并查看属性选项卡以执行此操作。只需点击 Properties 集合,您就会看到 DbType 设置为 AnsiString 的对话框。如果需要,您会在列表底部附近找到 DateTime2。