1

我正在尝试stored procedure在我的内部写sql command,如图所示:

Dim tdate As String = Me.PresentDate.Value.ToString("MM-dd-yyyy")

myCommand As New SqlCommand("select c.description as 'provider',b.lastname,
b.firstname, b.middleinitial,convert(varchar(10),b.dob,101) as DOB,
b.chartID,b.sex, d.businessname,d.businessfax from patientappointmentbase as a, 
patientlistbase as b,resourcebase as c, locationbase as d where convert(varchar(10),
a.starttime,101) = " & tdate & " 
and a.patientid = b.patientid and a.resourceid = c.resourceid and 
a.locationid = d.locationid order by provider, lastname, firstname", myConnection)

当我运行此代码时,我收到错误消息

Conversion failed when converting the varchar value '08/22/1954' to data type int.

4

2 回答 2

2

你有两个主要问题。

第一个问题是日期被内联到 SQL,因此您正在执行的 SQL 看起来像:

select ... where convert(varchar(10), a.starttime,101) = 07-07-2013

这不是有效的 SQL,因此您需要将日期参数用单引号括起来,即

... where convert(varchar(10), a.starttime,101) = '" & tdate & "' and ...

如果将它用双引号括起来并且将 QUOTED_IDENTIFIER 设置为 on,SQL Server 将尝试将其解释为列名。

第二个问题是您使用两种不同的日期格式进行比较。使用 101 样式进行转换会产生格式为 mm/dd/yyyy 的日期。但是,您使用的是 mm-dd-yyyy 格式。

这意味着您要求 SQL Server 将“07/07/2013”​​与“07-07-2013”​​进行比较,这将永远不会相同。最简单的解决方法是更改​​ tdate 的日期格式以匹配 SQL Server:

Dim tdate As String = Me.PresentDate.Value.ToString("MM/dd/yyyy")
于 2013-07-07T18:55:01.187 回答
0

您连接的 SQL 字符串看起来像

convert(varchar(10), a.starttime,101) = 08/22/1954

这是一系列除法运算,产生一个数字,而不是日期。

您想通过将值括在引号中来创建日期文字。
(或者,更好的是,使用参数)

于 2013-07-07T16:22:02.330 回答