私はC#とSQL Serverでログインアプリケーションを作成しています。ExecuteNonQuery()は常に-1を返します
私のプログラムは何ですか:指定されたユーザー名とパスワードがデータベースに存在するかどうかを調べます。
見つかった場合、ExecuteNonQuery()
は1(1ローが見つかりました)を返します。
この組み合わせが存在しない場合、ExecuteNonQuery()
は別のものを返す必要があります。
私の場合は、良い組み合わせと間違った組み合わせを使用するたびに、常に-1が返されます...これをどのように修正しますか?
私が知っている、そこに同じ質問のためのいくつかの既存の投稿がありますが、それはまだ固定していない...
また、ExecuteNonQuery()
& ExecuteScalar()
の違いは何ですか?
これは、送信されるクエリです:
private void btn_loginvolgende_Click(object sender, EventArgs e)
{
gebruiker.Gebruikersnaam = Convert.ToString(tb_gebruikersnaamlogin.Text);
gebruiker.Wachtwoord = Convert.ToString(tb_wachtwoordlogin.Text);
gebruiker.Achternaam = "a";
gebruiker.Geslacht = "a";
gebruiker.Geslacht = "a";
gebruiker.Huidiggewicht = 1;
gebruiker.Streefgewicht = 1;
gebruiker.Leeftijd = 1;
gebruiker.Naam = "a";
db.QueryToDatabase("Select count (*) from Gebruiker where Wachtwoord = @Wachtwoord AND Gebruikersnaam = @Gebruikersnaam;", gebruiker);
Thread.Sleep(500);
if (db.Success == false)
{
MessageBox.Show("Login gegevens kloppen niet!");
}
else if (db.Success == true)
{
MessageBox.Show("U bent met succes ingelogd");
}
}
、これは私のクラスである:
public void QueryToDatabase(string commandText, Gebruikerklasse gebruiker)
{
// nieuwe connectie maken
// ontvangt de query vanuit 'buttonclick' en voert hem hier uit
// als ExecuteNonQuery niet kan worden uitgevoerd is er iets fout gegaan. D.m.v een bool moet hij dan een bericht tonen
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(commandText, conn))
{
conn.Open();
cmd.Parameters.AddWithValue("@Naam", gebruiker.Naam);
cmd.Parameters.AddWithValue("@Achternaam", gebruiker.Achternaam);
cmd.Parameters.AddWithValue("@Leeftijd", gebruiker.Leeftijd);
cmd.Parameters.AddWithValue("@Geslacht", gebruiker.Geslacht);
cmd.Parameters.AddWithValue("@Huidiggewicht", gebruiker.Huidiggewicht);
cmd.Parameters.AddWithValue("@Streefgewicht", gebruiker.Streefgewicht);
cmd.Parameters.AddWithValue("@Gebruikersnaam", gebruiker.Gebruikersnaam);
cmd.Parameters.AddWithValue("@Wachtwoord", gebruiker.Wachtwoord);
int a = cmd.ExecuteNonQuery();
if (a == 1)
{
Success = true;
}
else if (a == -1)
{
Success = false;
}
conn.Close();
}
}
SELECTクエリを実行しています。 ExecuteNonQueryは、UPDATE/INSERT/DELETEを実行するときに影響を受ける行の数を返します。レコードがある場合はkwowにし、ExecuteReaderを使用し、返されたオブジェクトHasRows – Steve
(msdn、UPDATE、INSERT、およびDELETEステートメントの場合)の戻り値は、コマンドの影響を受ける行の数です。挿入または更新される表にトリガーが存在する場合、戻り値には、挿入操作または更新操作の両方によって影響を受ける行数と、トリガーの影響を受ける行数が含まれます。他のすべてのタイプのステートメントの場合、戻り値は-1です。ロールバックが発生した場合、戻り値も-1になります。 – Shyju
結果が1列の単一の行があるため、クエリがExecuteScalarによって実行されます。 – Steve