Попытка вывести данные в Visual Web Developer 2008 из базы данных ACCESS с помощью VB - PullRequest
0 голосов
/ 05 ноября 2011

Хорошо, я могу успешно подключиться к своей базе данных Access, но я все еще учусь, как выводить эти данные. Вот беги вниз.

Я разрабатываю страницу, где пользователь вводит идентификатор клиента, а затем получает список инцидентов для этого клиента. Тогда я бы хотел, чтобы пользователь мог добавить опрос об инциденте.

Проблема, с которой я сталкиваюсь, заключается в возможности отобразить эти данные. Я пробовал различные методы. В конце концов я хочу иметь возможность отображать данные в списке, и они выбирают их и принимают участие в опросе, но я еще не так далеко. Вот что у меня есть в связи с моей попыткой, которая не работает для вывода данных:

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=" & "C:\Users\Allen PC7\Documents\Visual Studio 2008\Projects\1-A SportsPro\App_Data\TechSupport.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 As System.Data.OleDb.OleDbDataReader = myCommand.ExecuteReader () ... System.Data.OleDb.OleDbException: значение не указано для одного или нескольких обязательных параметров.

Спасибо

1 Ответ

1 голос
/ 05 ноября 2011

Вы не передаете правильное значение в 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 имеет неправильный тип - вы должны как проверить, так и преобразовать в правильный тип (мой код предполагает целое число).

...