Как исправить этот код ?
Привет всем, у меня есть этот код, который работает отлично, и нет никакой ошибки, просто он показывает мне неправильную информацию, на самом деле, это не так, он просто показывает мне больше, чем должно быть, у меня есть datachart, который показывает мне данные в месяцах, например, я вижу datachart августа, но когда я отправил свою мышь в точку, она показывает мне информацию о сентябре также, моя дата в SQL формируется в DATETIME, а затем в VB.net я сформировал в "гггг-мм", это мой код для аннотации
Public Sub (day as String, Username as String) as String Dim data As String = "" Dim constr As String = ";" Dim query As String = "SELECT Date,Description,Price,Quantity,Username FROM [dbo].[ShareCost] WHERE DATEPART(DAY,Date) = @Day AND LTRIM(RTRIM(Username)) = @UserName" Dim dt As DataTable = New DataTable() Using con As SqlConnection = New SqlConnection(constr) Using command As New SqlCommand(query, con) command.CommandType = CommandType.Text command.Parameters.AddWithValue("@Day", day.Trim()) command.Parameters.AddWithValue("@UserName", userName.Trim()) Using sda As SqlDataAdapter = New SqlDataAdapter(command) sda.Fill(dt) End Using End Using End Using For Each row As DataRow In dt.Rows Dim [date] As String = Convert.ToDateTime(Row("Date")).ToString("dd/MM/yyyy") Dim Username1 As String = Row("Username") Dim description As String = Row("Description") Dim price As String = If(Row("Price").ToString = "", 0, Row("Price").ToString) Dim quantity As String = If(Row("Quantity").ToString = "", 0, Row("Quantity").ToString) data = data & [date] & " - " & Username1 & " - " & description & " - " & price & " - " & quantity & Environment.NewLine Next Return data end sub End Function
Что я уже пробовал:
Я попытался изменить эту часть кода :
"SELECT Date,Description,Price,Quantity,Username FROM [dbo].[ShareCost] WHERE (Date BETWEEN @Day AND DATEADD(MONTH,1,@Day)) AND LTRIM(RTRIM(Username)) = @UserName"
command.Parameters.AddWithValue("@Day", day.Trim() & "-" & DateTime.Now.Day.ToString())но это дает мне ошибку в этой строке
sda.Fill(dt)
Conversion failed when converting date and/or time from character string.
Спасибо Вам за вашу помощь,
с уважением
Е
Richard MacCutchan
Вы преобразуете @Day в строку, где она должна быть датой и временем.
Member 13410460
Я конвертирую в строку, потому что моя дата сформирована таким образом "2020-09". Я не знаю, есть ли в этом смысл.
Michael Hulthin
Что делать, если вы передадите в функцию year и month (вместо "<year>-<month>") и измените часть where на
... Функция datepart(Год,Дата) = @год и datepart(месяц,дата) = @месяц ...
Member 13410460
Спасибо за ваш ответ, это было бы хорошо, если бы у меня была дата в обычном формате ("ДД-ММ-гггг"), но в этом случае у меня есть дата, подобная этой "гггг-мм", так как я использую для своих диаграмм и различных результатов на приборной панели.
Richard MacCutchan
Нет, это не имеет смысла. Даты в базах данных должны быть всегда храниться как DateTime
или Date
типы. Преобразование их в строки просто усложняет ситуацию (как вы уже обнаружили).
Member 13410460
Спасибо за ваш ответ, в SQL они хранятся как DateTime, но когда я привожу их в Vb.net приборная панель я конвертирую их в этот формат, потому что мне нужно, чтобы в моей приборной панели были показаны месяцы года , а не дни. Но теперь, когда я хочу увидеть всю информацию, хранящуюся в определенный день года, мне как бы нужно добраться до дней месяца.
Richard MacCutchan
Ну, вы все еще делаете это неправильно. Единственный раз, когда он вам нужен в виде строки, - это когда вы хотите отобразить его (или его часть) в интересах пользователя. Все внутренние манипуляции и вычисления должны выполняться с использованием объектов DateTime.
Member 13410460
Спасибо за ваш ответ, но в этом случае, как я могу использовать datetime вместо String, я просто пишу это : command.Параметры.AddWithValue ("@Day", день.&Ампер обивка () и усилитель; " -"; дату-время.Сейчас() ?
Richard MacCutchan
Нет, прекратите использовать строки там, где вам нужны объекты DateTime. Это действительно сделает вашу жизнь намного проще.
Member 13410460
Спасибо за ваш совет, но в этом случае как мне исправить эту проблему, изменив строку на datetime ?
Richard MacCutchan
Предполагая, что День = "12", то выражение day.Trim() & "-" & DateTime.Now()
дать вам: "12-22 Sep 2020"
или что-то подобное , что вообще не имеет смысла.
Если вы хотите изменить значение дня на какое-то заранее определенное число, то используйте свойства или методы структуры DateTime. Это не хорошо, пытаясь угадать, правила программирования являются достаточно специфическими, и хорошо документированы.
Member 13410460
Спасибо за ваш ответ.