2011-08-25 2 views
1

asp.net을 사용하여 경매 사이트를 만들려고합니다. 내 경매의 시작일 & 시간과 종료일 & 시간은 SQL Server 2008 R2 데이터베이스에 datetime 형식으로 저장됩니다. 나는 vb.net을 사용하고있다. 현재 날짜 및 시간에 상대적인 날짜 및 시간 부분을 쿼리 할 수있는 select 문을 만들려고합니다 (현재 진행중인 경매 만 표시하도록). Date.Now 함수를 사용하여 날짜 부분을 성공적으로 쿼리 할 수 ​​있지만 시간이 많이 들었습니다. DateAndTime.Now는 작동하지 않습니다. 나는 심지어 데이터베이스에서 시간과 날짜를 분리하려했지만 여전히 효과적인 쿼리를 얻을 수 없습니다.datetime에서 날짜 및 시간 조작 vb.net에서 SQL 서버 유형

는 여기에 내가 해봤 코드의 두 가지 예 : START_DATE_TIME 및 END_DATE_TIME 유형 날짜 시간의 그것에 의하여

Dim Connection As SqlConnection = New SqlConnection(...) 
    Dim Command As SqlCommand = New SqlCommand() 
    Dim _Reader As SqlDataReader 
    Command.Connection = Connection 
    Command.CommandText = "Select ... from Auctions where Start_Date_Time > " & DateAndTime.Now & " And End_Date_Time > " & DateAndTime.Now 

.

그리고 : 시작일과 종료일이 Date 형의, 그리고에서는 Start_Time 및 END_TIME 유형 시간의 그것에 의하여

Dim Connection As SqlConnection = New SqlConnection(...) 
    Dim Command As SqlCommand = New SqlCommand() 
    Dim _Reader As SqlDataReader 
    Command.Connection = Connection 
    Command.CommandText = "Select ... from Auctions where Start_Date >= " & Date.Today & "Start_Time <= " & DateAndTime.Now.ToLongTimeString & " And End_Date >= " & Date.Today & " And End_Time <= " & DateAndTime.Now.ToLongTimeString 

(7).

어떤 제안이 사전에 감사합니다 감사합니다

+3

를 사용하여 매개 변수화 쿼리를. 문자열로 날짜와 시간을 전달하지 마십시오. 또한 현재 시간을 기준으로 매개 변수를 전달하는 대신 TSQL'getdate() '및'dateadd' 함수를 사용하는 것을 고려할 수 있습니다. –

+0

@Martin은 T-SQL의 값 사용에 대한 유일한주의는 서버가 다른 시간대에있을 수 있다는 것입니다. 우리는 영국 데이터 센터의 앱이 버지니아의 데이터베이스에 글을 올렸지 만 아무도 앱이 표시해야하는 내용이나 데이터베이스에 저장되어 있어야하는 내용에 동의 할 수 없었던 문제에 대해이 문제를 한 번 겪었습니다. 그 이후로 나는 항상 UTC에 SQL 서버와 앱 서버를 배치하기 위해 싸웠지 만, 앱이 앱 서버의 날짜/시간을 필요로한다면 ... –

답변

0

의견을 보내 주셔서 감사합니다. 그것은 내 부분에 간단한 오류였다. 내가 할 일은 DateAndTime.Now를 쉼표로 묶어 넣는 것뿐입니다.

그래서이 코드는 작동합니다

Dim Connection As SqlConnection = New SqlConnection(...) 
Dim Command As SqlCommand = New SqlCommand() 
Dim _Reader As SqlDataReader 
Command.Connection = Connection 
Command.CommandText = "Select ... from Auctions where Start_Date_Time <= '" & DateAndTime.Now & "' And End_Date_Time >= '" & DateAndTime.Now & "'" 
+1

문자열 연결을 사용하지 마십시오. 성능이 저하 될뿐만 아니라 SQL 주입 공격을받을 수 있습니다. 매개 변수화 된 SQL을 대신 사용하십시오. –

+0

@Jim 조언 주셔서 감사하지만이 사이트는 절대 게재되지 않습니다. 데모 용입니다. – Matt

0
dim myDateTime as Datetime = Now() 

... 

Select ... from Auctions where Start_Date_Time > " & myDateTime.ToShortTimeString() & ... 

http://msdn.microsoft.com/en-us/library/system.datetime.toshorttimestring.aspx

+0

OP는 [DateAndTime] (http://msdn.microsoft.com/en- us/library/1c24ezyz.aspx)가 아니라 DateTime입니다. – Tim

+0

@Tim - 사실, 그는 단지 시간뿐만 아니라 그것을 사용하고 있습니다. 그는 쉽게 DateTime을 사용할 수 있습니다. 나는 그가 정말로 변수 유형이 무엇인지 신경 쓰지 않는다고 생각한다. 하지만 명확히하기 위해 답변을 업데이트하겠습니다. - 감사합니다. – Chains

0

당신이 DateAndTime.TimeString Property를 사용하여 시도 적이 있습니까?

TimeString always returns the system time as "HH:mm:ss", which is a 24-hour format. DateTime의 시간 부분이 데이터베이스에 저장되는 방식에 따라 일부 서식을 지정해야 할 수 있습니다.

Dim Connection As SqlConnection = New SqlConnection(...) 
Dim Command As SqlCommand = New SqlCommand() 
Dim _Reader As SqlDataReader 
Command.Connection = Connection   
Command.CommandText = "Select ... from Auctions where Start_Date >= " & Date.Today & "Start_Time <= " & DateAndTime.TimeString & " And End_Date >= " & Date.Today & " And End_Time <= " & DateAndTime.TimeString