为什么我的tableadaptor强制转换为我的日期列上的字符串

时间:2016-08-01 20:09:31

标签: c# mysql tableadapter

我有一张包含日期的表格,以及有关该日期的不同数据。

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使用SELECT * FROM WKD WHERE WKDDATE8 = @WKDDATE8通过WKDDATE8查询此表,但由于某种原因,我的表需要字符串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;
    }

1 个答案:

答案 0 :(得分:3)

数据集设计器为日期参数创建字符串参数。

对于表适配器和DataSet命令,请查看GetDataByWKD8。在参数中,检查DbType的{​​{1}}是否为@WKDDATE8之类的字符串类型,然后将AnsiString更改为Dbtype,将Date更改为{{ 1}},然后你的fill命令将接受ProviderType类型的输入。

在Designer中突出显示查询,然后查看属性选项卡以执行此操作。只需点击Properties集合,您就可以获得DbType设置为AnsiString的对话框。如果需要,可以在列表底部附近找到DateTime2。

enter image description here