Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vb中的sql无法转换为日期_Sql_Sql Server_Vb.net - Fatal编程技术网

vb中的sql无法转换为日期

vb中的sql无法转换为日期,sql,sql-server,vb.net,Sql,Sql Server,Vb.net,您好,我正在尝试转换此行,以获取今天活动的人员列表,但无法使其正常工作 adapter.SelectCommand = New SqlCommand( _ "select * from klijent where convert(varchar,convert(datetime,replace('" & DateTimeUgovora.Value.ToString & "','#','')),111) >= convert(varchar,getda

您好,我正在尝试转换此行,以获取今天活动的人员列表,但无法使其正常工作

adapter.SelectCommand = New SqlCommand( _
            "select * from klijent where convert(varchar,convert(datetime,replace('" & DateTimeUgovora.Value.ToString & "','#','')),111) >= convert(varchar,getdate(),111)", myConn)
错误是将varchar数据类型转换为datetime数据类型导致值超出范围

我从前面得到的绳子是

“29.11.2013.19:41:08”


我到处搜索都找不到答案,请帮助

我刚刚用您提到的字符串创建了一个快速控制台应用程序。这可能会有帮助

Imports System.Globalization

Module Module1

Sub Main()
    Dim myDateString As String = "29.11.2013. 19:41:08"
    myDateString = myDateString.Replace(".", "")
    Dim myDate As DateTime = DateTime.ParseExact(myDateString, "ddMMyyyy HH:mm:ss", CultureInfo.InvariantCulture)
    Console.WriteLine(myDate.ToString())
    Console.ReadLine()
End Sub

End Module
我还为tsql创建了一个快速模块,可能会有帮助:

Declare @dt varchar(20)
set @dt = '29.11.2013. 19:41:08'
select convert(datetime, Replace(@dt, '. ', ' '), 103)

不需要将日期时间值转换为字符串,因为在SQL中可以直接比较日期时间值。这更稳定,因为它不依赖于区域设置。我不完全理解SELECT子句,因为即使比较有效,它也会返回表中的所有行或不返回任何行
但是,如果要在比较中使用表格列Kli_Ugovor_do,可以将语句更改为:

adapter.SelectCommand = New SqlCommand( _
            "select * from klijent where Kli_Ugovor_do >= getdate()", myConn)
顺便说一句:在您的语句中,您通过字符串连接包含了combobox的值。您应该习惯于在语句中包含参数,以避免SQL注入攻击。
因此,如果您想使用DateTimePicker的值,您的代码应该如下所示:

adapter.SelectCommand = New SqlCommand( _
            "select * from klijent where Kli_Ugovor_do >= @dt", myConn)
adapter.SelectCommand.Parameters.AddWithValue("@dt", dateTimeUgovora.Value)

如果您使用的是SQL,则不需要进行转换。只需输入这样的日期
'25/12/2013'
我的字符串是29.11.2013。19:41:08,如果不进行转换,就无法将其放入2013年11月29日。我正在从datetimepicker获取值…kilijent中的哪个字段是您将其与之进行比较的日期字段。Kli_Ugovor_do是表klijent中字段的名称,datetimepicker的名称是dateTimeUgovora,它是屏幕上的值。。。我的天啊,我是白痴。。。经过14个小时的编码,我觉得太累了,我需要这种选择。。。选择*from klijent,其中convert(varchar,convert(datetime,KLI_UGOVOR_DO,111))>=convert(varchar,getdate(),111);但datetimepicker值代替了getdateNice模块,但我认为tahat可以以某种方式将此行转换为另一个字符串。。。我是PL程序员,所以在PL中,这应该类似于从klijent where to_char(kli_ugovor_do,'mm.dd.yyyy')>=to_char(sysdate,'mm.dd.yyyy);所以我的目标是这样的。。。但无法在sql中获得它尝试了所有方法,但无法找出字符串转换为适合sqlHey@Vedran的字段形状,我更新了代码。也许这会有帮助。谢谢。Thx ankit我想问题的形式是。。。当我这样选择时,它在tsql中工作…从klijent中选择*,其中kli_ugovor_do>='2013-11-28 18:58:36';但是在VB中,我得到了字符串的值,比如“27.12.2013.20:58:35”@Vedran这很奇怪,你能发布你的VB.net代码吗。我将尝试复制我这边的问题。解决了它,感谢我想到的这个转换,我得到了解决方案…adapter.SelectCommand=New SqlCommand(“select*from klijent where kli_ugovor_do>=convert(varchar(20),@dt,111)”,myConn)@dt是datetimepicker.Values是这样的,我用getdate获得结果,但不是getdate,我需要datetimepicker的值,这是我无法解决的问题…你写的那个很有效,但我在datetimepicker中有值,它在我的klijent表中选择大于或小于日期的日期,并且date在datetimepicker中,并且总是导致一个错误,与我的编写方式不同it@VedranTurković:我已经更新了我的示例以使用DateTimePicker.Thx Markus,但我认为这是数据库和visual studio的问题……当我在字段kli_ugovor_do上点击select时,我在database中的结果是这样的格式2013-11-28 18:58:36和DateTimePicker wh恩,我将其传递给变量,得到“27.12.2013”。20:58:35“@VedranTurković:您看到的是值的字符串表示形式,以便您可以读取它们。在内部,db和.NET都将日期时间值存储为某种形式的数字。这使得比较日期比将日期存储为不同区域性的字符串要容易得多。因此,select的结果和您在调试器中看到的可能是不同的格式,但是如果您使用与第二个类似的语句,这将无关紧要,并且比较将是有效的。