sqlreader читает неправильный столбец - PullRequest
0 голосов
/ 18 ноября 2018

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

dataAdapter.SelectCommand = new SqlCommand("SELECT ID FROM Persons WHERE FirstName = " + txtBoxFirst.Text.ToString() + " AND LastName = " + txtBoxLast.Text.ToString()
                                                       , sqlConnection);
            sqlConnection.Open();
            SqlDataReader read = dataAdapter.SelectCommand.ExecuteReader();

            while (read.Read())
            {
                pID = (Int32.Parse(read["ID"].ToString()));
            }
            read.Close();
            sqlConnection.Close();

Ошибка отображается как

System.Data.SqlClient.SqlException: 'Ошибка преобразования при преобразовании значения varchar' First 'в тип данных int.'

enter image description here

enter image description here

1 Ответ

0 голосов
/ 18 ноября 2018

Во-первых, вы пропускаете одиночную кавычку ' в своем запросе, поэтому ваш параметр не будет строкой.

так что это может быть похоже на

"SELECT ID FROM Persons WHERE FirstName = '" + txtBoxFirst.Text.ToString() + "' AND LastName = '" + txtBoxLast.Text.ToString() + "'"

Но есть большая проблема, чем SQL-инъекция .

Я бы посоветовал вам использовать параметры вместо подключенной строки оператора SQL.

убедитесь, что размер типа данных вашего параметра соответствует размеру схемы таблицы.

string sqlQuery =  "SELECT ID FROM Persons WHERE FirstName = @FirstName AND LastName = @LastName";
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(sqlQuery, connection))
{
    command.Parameters.Add("@FirstName", SqlDbType.VarChar,100).Value = txtBoxFirst.Text;
    command.Parameters.Add("@LastName", SqlDbType.VarChar, 100).Value = txtBoxLast.Text;

    SqlDataReader read = dataAdapter.SelectCommand.ExecuteReader();

    while (read.Read())
    {
        pID = (Int32.Parse(read["ID"].ToString()));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...