Я склоняюсь к тому, чтобы клиенты не создавали SQL-операторы для выполнения вашим уровнем доступа к данным, но, предполагая, что вам нужно что-то работать в ближайшее время, вы можете вместо этого использовать параметризованный запрос.
Если вы выполняете вызовы методов от клиента (ов) к другим уровням вашего приложения, вы можете создать SqlCommand
на клиенте и передать его следующему уровню, где он будет выполняться.
VB.NET - это не тот язык, который я обычно использую, поэтому, пожалуйста, простите за любые синтаксические ошибки.
На клиенте:
Dim dateValue As Date = DateTime.Now
Dim queryText As String = "SELECT CASE WHEN GETDATE() = @Date THEN 'True' ELSE 'False' END"
Dim command As SqlCommand = New SqlCommand(queryText)
command.Parameters.AddWithValue("@Date", dateValue)
Если вам необходимо отправить строку, вы можете преобразовать DateTime
в строку на клиенте, а затем преобразовать обратно в DateTime
на уровне доступа к данным, используя общий формат.
На клиенте:
Dim queryText As String = "SELECT CASE WHEN GETDATE() = @Date THEN 'True' ELSE 'False' END"
Dim dateValue As Date = DateTime.Now
Dim dateString = DateTime.Now.ToString("M/d/yyyy H:mm:ss.fff", DateTimeFormatInfo.InvariantInfo)
Затем отправьте queryText
и dateString
на следующий уровень в вашем приложении, где он преобразуется обратно в Date
и снова использует параметризованный запрос:
Dim dateValue As Date
Date.TryParseExact(dateString, "M/d/yyyy H:mm:ss.fff", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, dateValue)
Dim command As SqlCommand = New SqlCommand(queryText)
command.Parameters.AddWithValue("@Date", dateValue)
Если ваши клиенты находятся в разных часовых поясах, вам следует (как упомянул @Martin Smith) использовать время UTC.
В .NET
Dim dateValue = DateTime.UtcNow
, а также в вашем запросе, используя GETUTCDATE()
:
Dim queryText As String = "SELECT CASE WHEN GETUTCDATE() = @Date THEN 'True' ELSE 'False' END"