ExecuteNonQuery возвращает 0? - PullRequest
       26

ExecuteNonQuery возвращает 0?

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

У меня есть следующий код, который сравнивает хеш-значение и имя пользователя с соответствующим хеш-значением и именем пользователя в локальной базе данных ( App_Users3 )

//-
SqlConnection con = new SqlConnection();
con.ConnectionString = ("Data Source=DESKTOP-PGHMM6M;Initial Catalog=LocalUsers;Integrated Security=True");
con.Open();                

var cmd = new SqlCommand(@"SELECT Username, Hash FROM App_Users3 WHERE Hash = @Hash AND Username = @Username");
cmd.Connection = con;

// savedPasswordHash = cmd.ExecuteScalar() as string;
cmd.Parameters.Add("@Hash", SqlDbType.NVarChar, 50).Value = savedPasswordHash;
cmd.Parameters.Add("@Username", SqlDbType.NVarChar, 400).Value = AppUsername;

if (cmd.ExecuteNonQuery() > 0) 
{
    MessageBox.Show(" Query successful.. something matched..  ");
    // change page.. load a profile? 
}

Не выдаетлюбые ошибки, но я не понимаю, почему окно сообщения не появляется.

1 Ответ

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

ExecuteNonQuery возвращает строки, затронутые изменением операторов данных (вставка, обновление, удаление).Вы должны использовать ExecuteScalar для таких операторов выбора и, например, возвращать значение идентификатора пользователя.Если вы хотите вернуть более одного значения (или несколько строк, или несколько столбцов), вы должны использовать ExecuteReader .

. Здесь ваш код изменен для возврата идентификатора пользователя соответствующего пользователя.

//-
    SqlConnection con = new SqlConnection();
    con.ConnectionString = ("Data Source=DESKTOP-PGHMM6M;Initial Catalog=LocalUsers;Integrated Security=True");
    con.Open();                

    var cmd = new SqlCommand(@"SELECT UserId FROM App_Users3 WHERE Hash = @Hash AND Username = @Username");
    cmd.Connection = con;
    //savedPasswordHash = cmd.ExecuteScalar() as string;
    cmd.Parameters.Add("@Hash", SqlDbType.NVarChar, 50).Value= savedPasswordHash;
    cmd.Parameters.Add("@Username", SqlDbType.NVarChar, 400).Value = AppUsername;


    if (cmd.ExecuteScalar() != null) {
        MessageBox.Show(" Query successful..something matched..  ");
        //change page.. load a profile? 
    }
}
...