我正在使用C#和SQL Server创建登录应用程序。
我的程序做了什么:查看是否可以在数据库中找到给定的用户名和密码。
如果可以找到,<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Click to toggle</p>
<div class="on">
<span class="n">On</span>
<span class="f">Off</span>
</div>
应该返回1(找到1行)。
如果组合不存在,ExecuteNonQuery()
应返回其他内容。
但在我的情况下,每当我使用好的或错误的组合时,它总是返回-1 ...我该如何解决这个问题?
我知道,同一个问题有一些现有的帖子,但它仍然没有修复......
另外,ExecuteNonQuery()
和&amp;之间有什么区别? 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");
}
}
答案 0 :(得分:1)
您似乎希望使用单个方法针对数据库执行每项可能的任务。这实际上是不可能的。更好的方法是在类中使用与数据库进行交互的特定方法
例如,您可以更改Gebruikerklasse
并添加名为Exists
的方法,您可以在其中微调特定任务的互动。当您只需要两个参数时,无需创建大量参数。使用性能更高的ExecuteScalar(和更正)调用从存储等中获取信息....
public class Gebruikerklasse
{
....
public bool Exists()
{
string commandText = @"Select count (*) from Gebruiker
where Wachtwoord = @Wachtwoord AND
Gebruikersnaam = @Gebruikersnaam;",
using (SqlConnection conn = new SqlConnection(DBClass.GetConnectionString()))
using (SqlCommand cmd = new SqlCommand(commandText, conn))
{
conn.Open();
cmd.Parameters.AddWithValue("@Gebruikersnaam", gebruiker.Gebruikersnaam);
cmd.Parameters.AddWithValue("@Wachtwoord", gebruiker.Wachtwoord);
int a = Convert.ToInt32(cmd.ExecuteScalar());
return (a > 0);
}
}
}
这应该是为您的任务创建OOP方法的第一步。接下来将学习如何将模型与数据库代码分开。
附注:强制对表进行计数只是为了发现条目是否存在是一种浪费。有一个特定的SQL语句在这里有很多帮助
搜索IF EXISTS并阅读本文
Exists vs Count The battle never ends
答案 1 :(得分:0)
我知道这些问题已得到解答。但我想为您添加一些其他信息:
ExecuteNonQuery - 运行查询并返回受影响的行。
ExecuteScalar - 运行查询并返回第一行第一列的值。
ExecuteReader - 运行查询并返回SqlDataReader;可用于读取请求的数据库记录
我最近也写了一篇关于这个的教程,包括“内存管理”。请参阅:http://jeroenstevens.blogspot.ca/2017/02/how-to-connect-netc-to-sql-database.html