Sql server VS Express 2013在DATEADD中使用参数导致无法将参数值从十进制转换为DateTime

Sql server VS Express 2013在DATEADD中使用参数导致无法将参数值从十进制转换为DateTime,sql-server,vb.net,Sql Server,Vb.net,这让我快发疯了 简单地说,用户从下拉列表中选择周数,该值将传递给变量,但由于该值不起作用,我目前正在硬编码该变量: 整数形式的Dim周数=-4 一旦我让它工作,我将设置周等于组合框的值 然后将Weeks传递到表适配器SQL的以下部分注意:我不是通过VB代码添加参数,它是Visual Studio中表适配器的SQL部分: 和DateEntered>=DATEADDweek,CONVERTINT,@Weeks,GETDATE 我开始时没有转换,但在谷歌搜索问题并阅读以下内容后: 我输入了转换,但仍然

这让我快发疯了

简单地说,用户从下拉列表中选择周数,该值将传递给变量,但由于该值不起作用,我目前正在硬编码该变量:

整数形式的Dim周数=-4

一旦我让它工作,我将设置周等于组合框的值

然后将Weeks传递到表适配器SQL的以下部分注意:我不是通过VB代码添加参数,它是Visual Studio中表适配器的SQL部分:

和DateEntered>=DATEADDweek,CONVERTINT,@Weeks,GETDATE

我开始时没有转换,但在谷歌搜索问题并阅读以下内容后: 我输入了转换,但仍然得到错误

我只是想检查是否有任何匹配的DB行,其中DateEntered是在过去的4周内输入的,但希望用户选择该数字,因此使用forms组合框。 如果我使用

输入的日期>=DATEADDweek,-4,GETDATE

在SQL中,它可以完美地工作。我想,这对我尝试制作一个用户友好的程序来说是一件好事

如果您能提供任何帮助,我将不胜感激,因为我已经花了几个小时试图让这项工作,我的头发拔出来了

非常感谢,,
保罗。

不看代码就很难回答。 我想这是日期类型的问题。 通常,一种通用的方法是在SQL中使用参考日期(如01/01/2000)和整数字段 datediffday,输入日期,'01/01/2000'作为数据V 然后在vbnet中 dim dv作为整数=datediffday,今天,'01/01/2000'
并筛选sql表选择。。。从sqltable中,dv>datav-28

最终按照SEAN的指针运行。放弃使用DATEADD,因为它根本不起作用。正如他所说,您正在使用设计时控件。我认为你所做的可能超出了这些控制的范围

我就是这样绕过这个问题的

Dim WORetrieveDate作为字符串

WORetrieveDate=DateTime.Now.AddDaysWeeksComboBox.Text*-1*7 文本是一个下拉表单框,显示要从中选择的周数和-1,因为我想在过去而不是将来创建一个日期

然后在TableAdapter的Fill SQL语句中

输入的日期>=@WORetrieveDate


现在,日期比较非常有效。再次感谢Sean为我指明了正确的方向。

不确定您所说的是什么意思,它是表适配器的SQL部分。您能否向我们展示将SQL放在一起并使用它填充数据集/数据表的代码?正如我在文章中所说的-我不是通过VB代码添加参数,它是Visual Studio中表适配器的SQL部分。-我正在使用VisualStudioGUI。我有一个表适配器,这是SQL的一部分。很抱歉,忘记添加。。。SQL用于通过代码行填充TableAdpter:Me.SageWorksOrdersTA.FillMe.ProductionDataSet.SageWorksOrders,Weeks抱歉,我应该在帖子中包含该代码行。啊,您使用的是设计时控件。我认为你所做的可能超出了这些控制的范围;使用SQL函数。先在vb中转换日期怎么样?DateTime.Now.AddDaysweeks*7Hmm。消息听起来像是DateEntered被定义为十进制而不是日期。但我不明白为什么用常量替换\@week可以解决这个问题。我尝试了使用上面的两个SQL代码段进行查询,它们都按照我的预期工作。\@周的定义是什么?我尝试了一个varchar和一个decimal,它们都很好用。您可能会给出更大的代码摘录,可能错误更复杂。我不希望用户必须选择一个日期,我希望他们在过去的x个星期内对照表进行检查。你缺少什么代码?