【问题标题】:Why is my tableadaptor forcing a cast to string on my date column为什么我的 tableadaptor 强制在我的日期列上强制转换为字符串
【发布时间】:2016-08-01 20:09:31
【问题描述】:

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

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

现在,这就是令人沮丧的地方。我可以手动将设计器从字符串更改为日期时间并运行,它工作正常,但是我再次运行它,我得到一个构建错误,因为查询需要一个字符串,但是,如果我让它作为一个字符串,我得到很明显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;
    }

【问题讨论】:

  • 源代码在哪里?
  • 确保您的 TableAdaptor 中的列设置为“DateTime”类型。如果您使用的是可视化编辑器,只需单击列名,属性窗口中应该会有一个类型选项。
  • @BenAbraham 它应该设置为System.DateTime
  • @drew 添加了代码,尽管我没有写
  • @Multinerd 我检查了一下,似乎数据集设计器为日期参数创建了字符串参数。

标签: c# mysql tableadapter


【解决方案1】:

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

查看您的DataSet,用于表适配器和GetDataByWKD8 命令。在参数中,检查@WKDDATE8DbType 是否是类似AnsiString 的字符串类型,然后将Dbtype 更改为Date 并将ProviderType 更改为DateTime,然后您的填充命令将接受类型的输入DateTime.

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

【讨论】:

  • 这并不能解决设计器问题 - 我认为这是最近的一个变化,因为我在使用旧 XSD 时遇到了这个问题,这些问题很好。现在所有 DateTime2 列都会发生这种情况,无论我可能做什么手动操作。这很烦人。
  • 没关系:这个答案澄清了它 - stackoverflow.com/questions/33888920/…
  • 当然你不应该改变xml或c#代码,我的意思也是使用设计器:)
  • 我同意 - 我做了足够多的 XSD 黑客攻击,真的不推荐它。我在您的回答中添加了一些内容,因为我需要帮助,这对我来说并不明显:)。
  • @RichardGriffiths 感谢您的反馈和编辑,使其更加清晰:)
猜你喜欢
  • 2018-05-06
  • 1970-01-01
  • 2022-11-16
  • 2023-02-02
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
相关资源
最近更新 更多