Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Отбор в SelectCommand по переменной / 25 сообщений из 29, страница 1 из 2
09.06.2004, 17:38
    #32554982
sposad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
Доброго времени суток всем.

Помогите пожалуйста разрешить следующую проблему.

Почему-то не возвращаются строки из

Friend strCompany as string

Me.SqlSelectCommand1.CommandText = "SELECT IDAuto, RegNumber, DateReg, VIN, NumbEngine, NumbCarriage, NumbBasket, color, SelectBox, KlimatKontr, IDNumbSpravkaSale, DataSale, NumbPTS, IssueDataPTS, CostAquisition, DateOper, IDOper, IDResponsRerson, Status, IDTypeEngine, Model,YearMade, IdAuto1, ModelEng, identTypeEngin, identTypeAuto, Company, IDModel FROM GibddOper where Company='" & strCompany & "'"

Значение strCompany передается из основной формы приложения кодом

Private Sub MenuItem4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MenuItem4.Click
frm.strCompany = Me.Label1.Text
frm.Show()
End Sub

Причём при отладке видно, что значение переменной присвоено, но строк нет. Если напрямую подставить "where Company='mosotis'", то всё получается, а задать в качестве переменной - строк нет.

Подскажите пожалуйста - почему ?

Заранее благодарен.
...
Рейтинг: 0 / 0
09.06.2004, 19:18
    #32555129
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
Я сталкивался с такими проблемами
Решаются так:
на строке которая интересует ставишь breakpoint
запускаешь приложение и выполняешь нужную процедуру
при остановке потом жмешь F8 и последовательно просматриваешь значение своих переменных наводя на них мышкой или в watch
Я думаю что та строка которая должна получиться с переменной будет иметь небольшое отличие от строки без перемменной
P.S. Я делаю проще при таких вещах как параметр запроса
Friend strCompany as string="'" & strCompany
& "'"
И ненадо парится с дополнительными кавычками типо твоих
...Company='" & strCompany & "'"
...
Рейтинг: 0 / 0
10.06.2004, 00:06
    #32555313
sposad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
Да ставил я точки останова и раньше и сейчас для страховки. Значение переменной точно такое, какое надо. Попытался применить и Ваш метод - результат такой же. Чёрт ....

Горююююю !!!!!
...
Рейтинг: 0 / 0
10.06.2004, 00:27
    #32555323
sposad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
Блин, кажется разобрался. Оказывается формирование строки Me.SqlSelectCommand1.CommandText в коде, сгенерированном мастером происходит раньше, чем успевает присвоиться значение переменной. Перетащив Me.SqlSelectCommand1.CommandText из области кода мастера в процедуру, которая гарантировано срабатывает после присваивания переменной, получил то, что надо. Вообще явилось новостью то, что код, сгенерённый мастером в форме, отрабатывается ещё до того, как вообще будет дана команда на открытие этой формы. Что ж буду иметь это ввиду ...

vladgrig Спасибо, если бы не начал играться с breakpoint, то до сих пор ничего бы и не понял.
...
Рейтинг: 0 / 0
10.06.2004, 07:36
    #32555392
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
sposad
Me.SqlSelectCommand1.CommandText = "SELECT IDAuto, RegNumber, DateReg, VIN, NumbEngine, NumbCarriage, NumbBasket, color, SelectBox, KlimatKontr, IDNumbSpravkaSale, DataSale, NumbPTS, IssueDataPTS, CostAquisition, DateOper, IDOper, IDResponsRerson, Status, IDTypeEngine, Model,YearMade, IdAuto1, ModelEng, identTypeEngin, identTypeAuto, Company, IDModel FROM GibddOper where Company='" & strCompany & "'"

Вообще для передачи параметров, есть специальный класс SqlParameter. Подобных проблем с которым и не возникло бы. При этом ваш запрос мог бы выглядеть следующим образом:


Me.SqlSelectCommand1.CommandText = "SELECT IDAuto, RegNumber, DateReg, VIN, NumbEngine, NumbCarriage, NumbBasket, color, SelectBox, KlimatKontr, IDNumbSpravkaSale, DataSale, NumbPTS, IssueDataPTS, CostAquisition, DateOper, IDOper, IDResponsRerson, Status, IDTypeEngine, Model,YearMade, IdAuto1, ModelEng, identTypeEngin, identTypeAuto, Company, IDModel FROM GibddOper where Company=@company"


Думаю свой запрос вы строили при помощи query builder при настройки SqlDataAdapter. Если бы в query builder'е вы добавили @company , необходимый параметер сформировался бы автоматически.
...
Рейтинг: 0 / 0
10.06.2004, 08:39
    #32555428
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
Так вот и я ГОВОРЮ
Смотреть надо не только значение переменной
А ПОЛУЧАЕМОЕ ЗНАЧЕНИЕ СТРОКИ ЗАПРОСА (с переменной и без неё, уверен они у тебя получаются не идентичные)
Какая строка получается?
...
Рейтинг: 0 / 0
10.06.2004, 08:42
    #32555435
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
Upss... Не проснулся, и недочитал доконца топик
Проблема то уже решена
SORRY
...
Рейтинг: 0 / 0
10.06.2004, 09:19
    #32555488
sposad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
2Sa

В query builder-е я не строил запрос, а просто перетащил в Dataset View с сервера целиком, да, без параметра. Параметр я потом пытался добавить в код мастера вручную типа ...Parameters.add("@company", strCompany). Но видно чего-то не так делал. При заполнении адаптера возникала ошибка. Мне кажется, что я как-то неправильно передавал значение параметра.
Буду благодарен, если Вы приведёте мне пример строки (строк), где параметр добавляется и ему присваивается значение, полученное из основной формы.
...
Рейтинг: 0 / 0
10.06.2004, 09:58
    #32555571
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
Да, действительно, будет очень интересно, и если не трудно (уважаемый Sa, знаю что надежда тока на Вас) пример с параметром запроса по нескольким значениям сразу
...
Рейтинг: 0 / 0
10.06.2004, 10:07
    #32555587
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
sposad
Буду благодарен, если Вы приведёте мне пример строки (строк), где параметр добавляется и ему присваивается значение, полученное из основной формы.
Создал проект, если у вас есть БД Nortwhind то могу скинуть. Для чистоты эксперимента использовал возможности визуальных мастеров в VS.NET.

Вручную пришлось написать всего 4 строчки, из них по делу только одна:
Код: plaintext
1.
2.
3.
Me.cmdSelect.Parameters("@product").Value = Me.txtParamValue.Text.Trim() // Параметру @product присвоим значение value
Me.dsTest.Clear()  
Me.daTest.Fill(Me.dsTest)

В данном контексте откуда получено значение параметра не важно, у меня это textbox txtParamValue

А вот код полученный мастером:
Код: plaintext
1.
2.
3.
4.
5.
6.
'
'cmdSelect
'
Me.cmdSelect.CommandText = "SELECT ProductName, ProductID FROM Products WHERE (ProductName = @product)"
Me.cmdSelect.Connection = Me.cnnTest
Me.cmdSelect.Parameters.Add(New System.Data.SqlClient.SqlParameter("@product", System.Data.SqlDbType.NVarChar,  40 , "ProductName"))
...
Рейтинг: 0 / 0
10.06.2004, 10:13
    #32555603
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
vladgrigпример с параметром запроса по нескольким значениям сразу

количество значений не имеет значение, все остается в силе.
...
Рейтинг: 0 / 0
10.06.2004, 10:58
    #32555745
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
Код: plaintext
1.
2.
3.
Me.cmdSelect.CommandText = "SELECT ProductName, ProductID FROM Products WHERE (ProductName = @product) AND (ProductID = @productid)"

Me.cmdSelect.Parameters("@product").Value = Me.txtParamValue.Text.Trim() // Параметру @product присвоим значение value
Me.cmdSelect.Parameters("@productid").Value = Me.txtParamValue1.Text.Trim() // Параметру @productid присвоим значение value

Так получается???
Классно, а то я запарился с этими запросами...
P.S. Кстати спасибо за прошлый топик с примером трёх ФОРМ
...
Рейтинг: 0 / 0
10.06.2004, 11:28
    #32555812
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
vladgrig
Код: plaintext
1.
2.
3.
Me.cmdSelect.CommandText = "SELECT ProductName, ProductID FROM Products WHERE (ProductName = @product) AND (ProductID = @productid)"

Me.cmdSelect.Parameters("@product").Value = Me.txtParamValue.Text.Trim() // Параметру @product присвоим значение value
Me.cmdSelect.Parameters("@productid").Value = Me.txtParamValue1.Text.Trim() // Параметру @productid присвоим значение value

Так получается???


Ну если речь идет про БД Northwind то ProductID в Products является типом integer ,и тогда надо так:
Код: plaintext
1.
2.
Me.cmdSelect.Parameters("@product").Value = Me.txtParamValue.Text.Trim() // Параметру @product присвоим значение value
Me.cmdSelect.Parameters("@productid").Value =  45  //  например ProductID должен быть равен  45 

В общем все работает как надо, для определенных типов присваем значения определенного типа (DateTime' у - DateTime, Int' у - Int and etc).
...
Рейтинг: 0 / 0
10.06.2004, 11:35
    #32555828
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
пример productid был теоретический
я про примеры из Northwind тока читал, у самого посмотреть руки не дошли
но замечание верное id будет integer
...
Рейтинг: 0 / 0
10.06.2004, 11:38
    #32555834
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
хотя в принципе можно и в textbox набирать цифры и т.п.
а значение textbox.text передавать в параметр
...
Рейтинг: 0 / 0
10.06.2004, 12:17
    #32555942
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
vladgrigхотя в принципе можно и в textbox набирать цифры и т.п.
а значение textbox.text передавать в параметр

Можно
...
Рейтинг: 0 / 0
10.06.2004, 14:01
    #32556229
sposad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
Уважаемый Sa, что бы без Вас тут делали

База Northwind конечно есть. E-mail: Asmirnov@netman.ru

Огромное спасибо.

PS: Прошу прощения, что давно не читал топик - задрали на работе.
...
Рейтинг: 0 / 0
10.06.2004, 14:47
    #32556324
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
sposadБаза Northwind конечно есть.

Прикрепил проект к сообщению.
ConnectionString в примере: Локальный сервер БД, аутентификация по учетной записи пользователя Windows
...
Рейтинг: 0 / 0
10.06.2004, 14:51
    #32556340
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
млин голова уже гудит...
Код: plaintext
1.
2.
3.
4.
5.
Me.cmdSelect.CommandText = "SELECT ProductName, ProductID FROM Products WHERE (ProductName = @product) AND (ProductID = @productid)"

Me.cmdSelect.Parameters(product).Value = Me.txtParamValue1.Text.Trim() 
Me.cmdSelect.Parameters(productid).Value = Me.txtParamValue.Text.Trim()


1) С числовыми значениями в БД работать хочет:
(ProductID = @productid)"
Me.cmdSelect.Parameters(productid).Value = 20
в запрсе получается (ProductID = 20) и запрос проходит

А со строками не хочет:
(ProductName = @product)
Me.cmdSelect.Parameters(product).Value ="privet"
в запрсе получается (ProductName = privet)
и запрос, соответственно, не проходит
надо чтобы получалось так (ProductName = 'privet')
Менял значения в параметрах на LongVarChar и на другие - НЕ ХОЧЕТ И ВСЁ
как сделать чтоб проходило значение в поле БД помеченном как текстовое???

2) Me.cmdSelect.CommandText = "SELECT ProductName, ProductID FROM Products WHERE (ProductName = @product) AND (ProductID = @productid)"

Если будет задан только один параметр, к примеру ProductName, а второй будет чистым - ЗАПРОС СРАБОТАЕТ (или надо будет весь запрос переписывать)
Me.cmdSelect.CommandText = "SELECT ProductName, ProductID FROM Products WHERE (ProductName = @product)???
...
Рейтинг: 0 / 0
10.06.2004, 15:35
    #32556455
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
У меня ведь в примере все ОК. Можете воспроизвести свою проблему в проекте testparameter и прикрепить к своему сообщению?

Код: plaintext
 Sa 
...
Рейтинг: 0 / 0
10.06.2004, 20:38
    #32557146
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
Не знаю как сделать ссылку на файл, но выход всё же нашёл
ссылка
Посмотрите, если не лень
Решение этого проекта с применением параметров меня и интересует...
...
Рейтинг: 0 / 0
10.06.2004, 21:34
    #32557188
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
Теперь вроде файл приложился по правилам
...
Рейтинг: 0 / 0
11.06.2004, 08:06
    #32557367
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
vladgrig
Посмотрите, если не лень
Решение этого проекта с применением параметров меня и интересует...


Довел ваш проект, до работоспособного состояния.
Места кода где я что то менял помечены в комментарии как "by sa", поэтому можете воспользоваться поиском по тексту.

Проблема у вас заключалась в порядке следования параметров в коллекции Parameters. В этом примере вы используете OleDbProvider, в OleDb название параметров в запросе не играет роли, а играет роль ПОРЯДОК их следования.
Использование же именованных параметров в запросе (при OleDbPovider) может привести к ошибке, поэтому следует ставить "?" вместо названия параметра.
Остальные комментарии смотрите в коде.



Код: plaintext
 user id  =  S a
...
Рейтинг: 0 / 0
11.06.2004, 08:08
    #32557369
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
Забыл приложить проект.

Код: plaintext
 user id  =  S a
...
Рейтинг: 0 / 0
11.06.2004, 09:01
    #32557401
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор в SelectCommand по переменной
В случае с Access (с использованием параметров) я понимаю многое не получается... Именно по этому я и просил запрос по нескольким параметрам...
Уважаемый Sa, спасибо за потраченное время, мне кажется оно проведено не зря (мы оба узнали что то новое)
Решение моей проблемы мне видится таким...
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Отбор в SelectCommand по переменной / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]