Читатель продолжает возвращать System.Data.SqlDataReader - PullRequest
0 голосов
/ 18 декабря 2018

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

В настоящее время мой считыватель данных продолжает возвращать странные аргументы в мой ярлык.

public void Saldo()
{
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Jobva\source\repos\Fundamentals\Fundamentals\bin\Debug\BankOfFontys.mdf;Integrated Security=True");
    con.Open();

    SqlCommand myCommand2 = con.CreateCommand();
    myCommand2.CommandText = "SELECT saldo FROM Account WHERE gebruikersnaam ='" + naam + "'";
    myCommand2.CommandType = CommandType.Text;

    SqlDataReader reader2 = myCommand2.ExecuteReader();

    saldoLbl.Text = Convert.ToString(reader2);
}

Это мой код, но по какой-то причине он не возвращает фактическое значение, также я использую правильную версию в команде, "naam" - это строка, в которой есть имя пользователя, введенное человеком, ион должен искать только в столбце, в котором это имя пользователя соответствует строке.

Как это работает?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Вы возвращаете строковое представление объекта SqlDataReader.Что вы действительно хотите сделать, это получить столбцы из чтения данных.Есть несколько способов сделать это, но вы можете попробовать что-то вроде:

    SqlDataReader reader2 = myCommand2.ExecuteReader();
    if (reader2.HasRows)
    {
        while (reader2.Read())
        {
            // reader2[] returns objects so cast them to your datatype
            var yourValue = reader2[0].ToString();

            // alternative syntax using column names
            int intValue = Convert.ToInt32(reader2["ID"]);
        }
    }

reader[index] получит столбцы в том порядке, в котором они были выбраны, а reader["ColumnName"] получит значения по имени столбца.

Вы должны проверить SqlDataReader документацию здесь .

0 голосов
/ 18 декабря 2018

Вам нужно выбрать значение из вашего считывателя, прочитав строку (и проверив, есть ли она на самом деле).В следующем примере кода я предположил, что ваш saldo является целочисленным значением.

using (SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Jobva\source\repos\Fundamentals\Fundamentals\bin\Debug\BankOfFontys.mdf;Integrated Security=True")) {
    con.Open();
    SqlDataReader reader2 = myCommand2.ExecuteReader();
    if (reader2.Read()) {
        saldoLbl.Text = reader2.GetInt32(0).ToString();
    }
    reader2.Close();
}

Возможно, было бы неплохо прочитать документы, так как это основы использования SQL в C #:

https://docs.microsoft.com/de-de/dotnet/framework/data/adonet/retrieving-data-using-a-datareader

Оттуда вы также можете узнать о ExecuteScalar () , что может быть более подходящим для вашего варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...