저는 C# 및 SQL Server로 로그인 응용 프로그램을 만들고 있습니다.ExecuteNonQuery() 항상 -1을 반환합니다.
내 프로그램이 수행하는 작업 : 지정된 사용자 이름과 암호를 데이터베이스에서 찾을 수 있는지 확인합니다.
찾을 수있는 경우 ExecuteNonQuery()
은 1 (1 row found)을 반환해야합니다.
조합이없는 경우 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를 사용하고 msdn의 반환 된 개체 HasRows – Steve
, UPDATE, INSERT 및 DELETE 문의 경우 반환 값은 명령의 영향을받는 행 수입니다. 삽입 또는 갱신중인 테이블에 트리거가 존재하면, 리턴 값에는 삽입 또는 갱신 조작과 트리거 또는 트리거에 의해 영향을받는 행의 수에 영향을받는 행 수가 포함됩니다. 다른 모든 유형의 명령문의 경우, 리턴 값은 -1입니다. 롤백이 발생하면 반환 값은 -1입니다. – Shyju
결과가 단일 열로 된 단일 행이 있으므로 ExecutScalar를 사용하여 더 나은 쿼리를 실행해야합니다. – Steve