#asp.net #vb.net #ms-access #datareader
#asp.net #vb.net #ms-access #datareader
Вопрос:
Хорошо, я могу успешно подключиться к своей базе данных Access, но я все еще учусь тому, как выводить эти данные. Вот краткое изложение.
Я разрабатываю страницу, на которой пользователь вводит идентификатор клиента, а затем получает список инцидентов для этого клиента. Затем я хотел бы, чтобы пользователь мог добавить опрос об инциденте.
Проблема, с которой я сталкиваюсь, заключается в возможности отображения этих данных. Я пробовал разные методы. В конце концов, я хочу иметь возможность отображать данные в listbox, чтобы они выбирали их и проводили опрос, но я еще не так далеко. Вот что у меня есть при подключении и моя попытка, которая не работает для вывода данных:
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sql As String = "SELECT [Title], [Description] FROM [Incidents] WHERE ([CustomerID] = textbox1.text)"
Dim conn As New System.Data.OleDb.OleDbConnection()
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" amp; "C:UsersAllen PC7DocumentsVisual Studio 2008Projects1-A SportsProApp_DataTechSupport.mdb"
Dim myCommand As New System.Data.OleDb.OleDbCommand(sql, conn)
conn.Open()
Dim myReader As System.Data.OleDb.OleDbDataReader = myCommand.ExecuteReader()
Try
While myReader.Read()
Console.WriteLine(myReader.GetInt32(0).ToString() ", " myReader.GetString(1))
End While
Finally
myReader.Close()
conn.Close()
End Try
End Sub
Я просто не могу ничего отобразить в консоли и вместо этого получаю сообщение об ошибке Dim myReader Как System.Data.OleDb.OleDbDataReader = myCommand.ExecuteReader()…System.Data.OleDb.OleDbException: для одного или нескольких обязательных параметров не задано значение.
Спасибо
Ответ №1:
Вы не передаете правильное значение в SQL:
"SELECT [Title], [Description] FROM [Incidents] WHERE ([CustomerID] = textbox1.text)"
Он попытается найти CustomerID
значение, равное значению базы данных «textbox1.text». Поскольку это, вероятно, неправильный тип данных и таблица / столбец, которые не существуют, вы получаете ошибку.
Вы должны использовать параметризованный запрос, чтобы избежать внедрения SQL.
Dim sql As String = "SELECT [Title], [Description] FROM [Incidents] WHERE ([CustomerID] = ?)"
Dim myCommand As New System.Data.OleDb.OleDbCommand(sql, conn)
myCommand.Parameters.Add("@p1", OleDbType.Integer, 4).Value = textbox1.text
Это приведет к сбою, если значение в textbox1.text
имеет неправильный тип — вы должны как проверить, так и преобразовать в правильный тип (мой код предполагает целое число).
Комментарии:
1. Итак, как бы мне просто выполнить простой запрос, чтобы получить значение из textbox1 и отобразить заголовок и описание для этого конкретного введенного идентификационного номера клиента? мне практически не повезло найти эту информацию в Интернете.
2. @allencoded — Ответ изменен, добавлен пример. Я предлагаю прочитать документацию MSDN для классов OleDB.