Member 11856456 Ответов: 1

Есть ли способ, которым я могу поместить держателей мест в дату и заставить SQL понять, что это дата?


Using sqlconn As New SqlConnection("sqlstring")
                Using da As New SqlDataAdapter(String.Empty, sqlconn)
                    Dim death As New StringBuilder("")
                    Dim Cemetery As New StringBuilder("")
                    Dim sql As New StringBuilder("Select profile.Individual_ID, First_name, Middle_name, Last_name, Sex, Race, Place_of_birth, County_of_birth, State_of_birth, Date_of_birth") 'inner join death on death.individual_ID = profile.individual_ID
                    Dim wherestatement As New StringBuilder(" WHERE 1 = 1 ")

 If Not String.IsNullOrEmpty(Birthyearstart.Text) AndAlso Not String.IsNullOrEmpty(Birthyearend.Text) Then
                        wherestatement.Append(" And Year(Date_of_birth) Between Year(@StartYear) And Year(@EndYear)")
                        da.SelectCommand.Parameters.AddWithValue("@StartYear", Birthyearstart.Text)
                        da.SelectCommand.Parameters.AddWithValue("@EndYear", Birthyearend.Text)
                    End If

 sql.Append(" from profile ")
                    sql.Append(death)
                    sql.Append(Cemetery)
                    sql.Append(wherestatement)
                    '   da.SelectCommand.CommandText = sql.ToString() + " Order by Last_name ASC;"
                    da.SelectCommand.CommandText = sql.ToStr


Я сохраняю даты как таковые 00/00/1901, когда я не знаю месяц или день, или и то, и другое. Однако, когда я запускаю свой код, я не получаю никаких строк, возвращаемых для структуры даты. Если я поставлю фактическую дату, например 01/01/1901, она вернет все записи, относящиеся к этой дате.

Есть ли способ использовать заполнители и все же фильтровать год?

Что я уже пробовал:

Я попытался сделать еще один держатель размещения и все равно получил тот же результат.

MadMyche

Я не вижу от ни в одном из этих SQL беспорядков

Dave Kreskowiak

Этот код-беспорядок, не будет компилироваться, так как третий StringBuilder не завершен. Там нет закрытия ") на нем.

Как уже указывалось, в вашем SQL-операторе нет предложения FROM. С какой таблицы должен начинаться этот запрос для извлечения данных?

Это также ужасный способ построения SQL-оператора. Лучший способ сделать это - создать хранимую процедуру в базе данных и просто передать ей параметры. Он прекрасно очищает код и делает его гораздо более гибким и ремонтопригодным.

Richard MacCutchan

Почему вы используете текстовые строки, когда ссылаетесь на значения дат? Используйте правильные типы даты и времени.

1 Ответов

Рейтинг:
0

CHill60

Помимо проблем с вашим запросом, Как уже упоминалось в комментариях, единственный способ, которым я могу видеть, что ваша концепция работает, - это хранить день, месяц и год в отдельных столбцах с нулевым значением. Затем просто используйте столбец year_of_birth в предложении where

Year_of_birth Between @StartYear And @EndYear
Или сделайте допустимую дату рождения обязательным полем


Maciej Los

5ed!
Кстати: это уже обсуждалось здесь: Должен ли я разделить дату на столбцы "день", "месяц" и "год"?[^]