Формирование запроса SQL с переменной

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Chel74
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 30.09.2010 (Чт) 11:34

Формирование запроса SQL с переменной

Сообщение Chel74 » 30.09.2010 (Чт) 12:05

Подозреваю, что задачка в общем то тривиальная, но самостоятельно решить ее не смог :(
Я не профессиональный программист, но понадобилось создать некий проект. Была взята Visual Studio 2008, потому что была под рукой и VB, потому что вроди как проще.
Проект довольно прост - на основании данных в различных таблицах на SQL формировать один итоговый отчет. Итак путем изучения учебных материалов и форумов продвигался вперед, пока не уперся в типичную задачу: необходимо формировать выборку из таблицы, где в качестве параметра была бы переменная. По сути что-то типо: select * from tabler where column=ID, где ID-переменная. Первое, что нашел - формировать SQL запросы с переменными нельзя. Выход один - формировать строку с необходимым запросом , и запускать ее на выполнение. И тут то у меня наступила каша в голове - все учебные материалы, которые я нашел описывают работу в предыдущих версиях VB Studio. Вроди не должно быть разницы, НО так как я ламер, то работаю в конструкторе и тут у меня не стыковки начались: в учебных материалах создаются объекты типо, OleDbConnection1 и OleDbDataAdapter1, у меня же создаются объекты типо BindingSource и TableAdapter. B еще у учебных материалах создается много Dataset-ов, у меня же он один и из него создаются BindingSource. Вот поэтому буксую, хожу по кругу но создать процедуру, по аналогии с учебными, которая запускала мой SQL запрос с переменной не могу :( В итоге, какими то извращенными действиями сделал следущее: в tableadapter-е в свойствах прикрутил некий запрос FillBy. После этого у меня появился объект FillByToolStrip. По сути он позволяет в форме вводить нужное мне значение переменной вручную и запускать запрос на выполнение. Я же подставляю значение моей переменной в текстовое поле и запускаю клик по кнопке формирования запроса автоматически. Вот такой вот изврат. :cry:
P.S. подозреваю что понаписал чушь, но если можете - помогите :oops:

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Формирование запроса SQL с переменной

Сообщение FireFenix » 30.09.2010 (Чт) 12:49

Что-то я недоперекурил... Вот пример

connectionString - строка с параметрами соединения с бд

Не бинарная переменная:
Код: Выделить всё
Dim id as Integer = 100500

Dim Connection As New OleDbConnection(connectionString)
Connection.Open()

Dim Command As New OleDbCommand("SELECT * FROM table WHERE id='" & id & "';", Connection)

Dim Reader As OleDbDataReader = Command.ExecuteReader()

While Reader.Read()
    Console.WriteLine(Reader.GetInt32(0))
End While

Reader.Close()
Connection.Close()


Бинарная переменная:
Код: Выделить всё
Dim Image() as Byte

Dim Connection As New OleDbConnection(connectionString)
Connection.Open()

Dim Command As New OleDbCommand(Nothing, Connection)

If Not Image Is Nothing Then
    Dim Param As New SqlParameter("@image", System.Data.SqlDbType.Image)
    Param.Value = Image

    Command.Parameters.Add(Param)

    Command.CommandText &= ",image=@image"
Else
    Command.CommandText &= ",image=NULL"
End If

Command.CommandText = "INSERT INTO table (image) VALUES (@image);"

Console.WriteLine(Command.ExecuteNonQuery())

Connection.Close()
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Chel74
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 30.09.2010 (Чт) 11:34

Re: Формирование запроса SQL с переменной

Сообщение Chel74 » 30.09.2010 (Чт) 13:03

FireFenix писал(а):Dim id as Integer = 100500

Dim Connection As New OleDbConnection(connectionString)
Connection.Open()

Dim Command As New OleDbCommand("SELECT * FROM table WHERE id='" & id & "';", Connection)

Dim Reader As OleDbDataReader = Command.ExecuteReader()

While Reader.Read()
Console.WriteLine(Reader.GetInt32(0))
End While

Reader.Close()
Connection.Close()

а у меня по этому запросу должен заполняться DataGridView :oops:

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Формирование запроса SQL с переменной

Сообщение FireFenix » 30.09.2010 (Чт) 13:58

Код: Выделить всё
While Query.Read()
    DataGridView1.Rows.Add()

    DataGridView1.Rows(Row).Cells(0).Value = Query.GetInt32(0)

    Row += 1
End While


Или кури мой пример из темы viewtopic.php?f=29&t=42327
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Chel74
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 30.09.2010 (Чт) 11:34

Re: Формирование запроса SQL с переменной

Сообщение Chel74 » 01.10.2010 (Пт) 8:02

Спасибо дружище буду разбираться :idea:


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37

    TopList