Попытка вывода данных в Visual Web Developer 2008 из базы данных ACCESS с использованием VB

#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.