Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проблема с построением SQL запроса VB.NET

19K
31 июля 2006 года
ejnadall
4 / / 31.07.2006
Перерыл что мог, но ответа так и не нашел.
в таблице citizen
поля ctz_ID - numeric (9)
ctz_family - varchar (30)
ctz_name (30)
с помощью combobox'а выбираем переменную ID по которой формирую запрос с условием.
у combobox'a valuemember'ом является ctz_ID
Все подключено.

На строке OdbcDataAdapter2.SelectCommand.ExecuteNonQuery возникает
An unhandled exception of type 'System.Data.Odbc.OdbcException' occurred in system.data.dll
Additional information: Системная ошибка.

Кто может. Помогите. Где что не так? Синтаксис?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ID As Integer
ID = ComboBox1.SelectedValue
Me.OdbcSelectCommand2.CommandText = "SELECT ctz_ID, ctz_family, ctz_name FROM citizen WHERE (ctz_ID = @ID)"
Me.OdbcSelectCommand2.Connection = Me.OdbcConnection1
Me.OdbcSelectCommand2.Parameters.Add(New System.Data.Odbc.OdbcParameter("@ID", System.Data.Odbc.OdbcType.Int, 9))
OdbcDataAdapter2.SelectCommand.Parameters("@ID").Value = ID
OdbcConnection1.Open()
OdbcDataAdapter2.SelectCommand.ExecuteNonQuery()
OdbcConnection1.Close()
OdbcDataAdapter2.Fill(DataSet2)
End Sub
273
31 июля 2006 года
3A3-968M
1.2K / / 22.12.2005
Первое, что порекоменду, выведи более подробную информацию об исключении, заключи в блок try...catch:
Код:
[FONT=Courier New]catch (OdbcException e)
   {
     string errorMessages = "";
 
     for (int i=0; i < e.Errors.Count; i++)
     {
         errorMessages += "Номер №" + i + "\n" +
                          "Сообщение: " + e.Errors.Message + "\n" +
                          "Ошибка: " + e.Errors.NativeError.ToString() + "\n" +
                          "Источник: " + e.Errors.Source + "\n" +
                          "SQL-запрос: " + e.Errors.SQLState + "\n";
     }
 
     System.Diagnostics.EventLog log = new System.Diagnostics.EventLog();
     log.Source = "Приложение";
     log.WriteEntry(errorMessages);[/FONT]

Что касается запуска запроса сделай так:
 
Код:
[FONT=Courier New]Dim conn As OdbcConnection[/FONT]
[FONT=Courier New]conn = New OdbcConnection("строка соединения с БД")[/FONT]
[FONT=Courier New]Dim [/FONT][FONT=Courier New]selectCommand As O[FONT=Courier New]dbcCommand[/FONT][/FONT]
[FONT=Courier New]selectCommand = New OdbcCommand("SELECT ctz_ID, ctz_family, ctz_name FROM citizen WHERE (ctz_ID = @ID)", conn)[/FONT]
[FONT=Courier New]selectCommand.Parameters.Add(New System.Data.Odbc.OdbcParameter("@ID", System.Data.Odbc.OdbcType.Int, 9))[/FONT]
[FONT=Courier New]...........[/FONT]
[FONT=Courier New]OdbcDataAdapter1.SelectCommand = selectCommand 'Вот этой строчки я у тебя не заметил[/FONT]
[FONT=Courier New]OdbcDataAdapter1.SelectCommand.ExecuteNonQuery[/FONT]
19K
01 августа 2006 года
ejnadall
4 / / 31.07.2006
Спасибо за Try - Catch...
Благодоря ему выяснилось что нужно где-то объявлять еще переменную @ID
Errors.Message "[Microsoft][ODBC SQL Server Driver][SQL Server]Must declare the variable '@ID'."
понимаю, что гляжу в книгу, а вижу, что-то непотребное, но никак не могу понять где еще описать эту переменную? Поле ctz_ID в БД имеет тип numeric. В коде @ID описал так же.



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'OdbcSelectCommand2
Dim ID As Integer
Dim conn As Odbc.OdbcConnection
Dim selectCommand As Odbc.OdbcCommand
Dim odbcDataAdapter3 As Odbc.OdbcDataAdapter
ID = ComboBox1.SelectedValue

conn = New Odbc.OdbcConnection("Trusted_Connection=Yes;DSN=***;UID=***;DATABASE=school;APP=Microsoft® & Visual Studio .NET;WSID=***")
odbcdataadapter3 = New Odbc.OdbcDataAdapter
selectCommand = New Odbc.OdbcCommand("SELECT ctz_ID, ctz_family, ctz_name FROM citizen WHERE (ctz_ID = @ID)", conn)
selectCommand.Parameters.Add(New Odbc.OdbcParameter("@ID", Odbc.OdbcType.Numeric))
selectCommand.Parameters("@ID").Value = ID
odbcDataAdapter3.SelectCommand = selectCommand
conn.Open()
odbcDataAdapter3.SelectCommand.ExecuteNonQuery()
conn.Close()
odbcDataAdapter3.Fill(DataSet2)
End Sub
273
01 августа 2006 года
3A3-968M
1.2K / / 22.12.2005
Мда уж, любопытная проблемка.... но вот что мне удалось получить из работы через ODBC: нельзя использовать именнованные параметры в SQL-запросе, необходимо использовать символ ?, например:
 
Код:
[FONT=Courier New]SELECT * FROM myTable WHERE myFile = ?[/FONT]
19K
01 августа 2006 года
ejnadall
4 / / 31.07.2006
т.е. "?" мы заменяем "@"?
или если просто оставить "?", то не понятна тогда логика описания переменной. где указывать ее value?
273
01 августа 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=ejnadall]т.е. "?" мы заменяем "@"?
или если просто оставить "?", то не понятна тогда логика описания переменной. где указывать ее value?[/quote]
Нет, именно знак ?. А value указываешь так:
 
Код:
[FONT=Courier New]Dim queryString As String[/FONT][FONT=Courier New] = "[FONT=Courier New]SELECT * FROM myTable WHERE myFile = ?"[/FONT][/FONT]
[FONT=Courier New]Dim command As OdbcCommand = New OdbcCommand(queryString, connection)[/FONT]
[FONT=Courier New]command.Parameters.Add("@Id", OdbcType.Numeric).Value  = 10[/FONT]

Допустим, у тебя три знака ? в запросе, тогда при добавлении параметров ты должен указать три имени параметра.
19K
02 августа 2006 года
ejnadall
4 / / 31.07.2006
уфффф...
заработало.
большое спасибо. получается типа так:

Dim ID As Integer
Dim conn As Odbc.OdbcConnection
Dim selectCommand As Odbc.OdbcCommand
Dim odbcDataAdapter3 As Odbc.OdbcDataAdapter
ID = CType(ComboBox1.SelectedValue, Integer)
conn = New Odbc.OdbcConnection("Trusted_Connection=Yes;DSN=***;UID=***;DATABASE=school;APP=Microsoft® & Visual Studio .NET;WSID=***")
odbcDataAdapter3 = New Odbc.OdbcDataAdapter
Dim queryString As String = "SELECT ctz_name FROM citizen WHERE (ctz_id = ?)"
selectCommand = New Odbc.OdbcCommand(queryString, conn)
selectCommand.Parameters.Add("@ID", Odbc.OdbcType.Numeric).Value = ID
selectCommand.Parameters("@ID").Value = ID
odbcDataAdapter3.SelectCommand = selectCommand
conn.Open()
odbcDataAdapter3.SelectCommand.ExecuteNonQuery()
conn.Close()
odbcDataAdapter3.Fill(DataSet3)
273
02 августа 2006 года
3A3-968M
1.2K / / 22.12.2005
У тебя повторение в коде:
[quote=ejnadall]
[FONT=Courier New]selectCommand.Parameters.Add("@ID", Odbc.OdbcType.Numeric).Value = ID[/FONT]
[FONT=Courier New]selectCommand.Parameters("@ID").Value = ID[/FONT]
[/quote]
Два раза задаешь value параметру
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог