[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]
проблема с построением SQL запроса VB.NET
в таблице 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
Код:
Что касается запуска запроса сделай так:
Код:
[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]
[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]
Благодоря ему выяснилось что нужно где-то объявлять еще переменную @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
Код:
[FONT=Courier New]SELECT * FROM myTable WHERE myFile = ?[/FONT]
или если просто оставить "?", то не понятна тогда логика описания переменной. где указывать ее value?
или если просто оставить "?", то не понятна тогда логика описания переменной. где указывать ее 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]
[FONT=Courier New]Dim command As OdbcCommand = New OdbcCommand(queryString, connection)[/FONT]
[FONT=Courier New]command.Parameters.Add("@Id", OdbcType.Numeric).Value = 10[/FONT]
Допустим, у тебя три знака ? в запросе, тогда при добавлении параметров ты должен указать три имени параметра.
заработало.
большое спасибо. получается типа так:
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)
[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 параметру