使用SQLite在c#中登录
本文关键字:登录 SQLite 使用 | 更新日期: 2023-09-27 18:26:38
我正在尝试使用SQLite数据库制作一个登录表单,我创建了一个名为login的新表,我添加了id(pk)、用户名和密码字段(用户名和密码都是作为数据类型的文本),我写了以下代码:
conn.Open();
SQLiteCommand cmd = new SQLiteCommand("select * from login where username = '"+textbox_id.Text+"' and password ='"+textbox_password.Text+"'", conn);
cmd.ExecuteNonQuery();
SQLiteDataReader dr = cmd.ExecuteReader();
int count = 0;
while (dr.Read())
{
count = count + 1;
}
if (count == 1)
{
MessageBox.Show("K");
}
我尝试过使用参数,但结果是一样的,什么都没发生,没有错误,但由于某种未知原因,计数没有增加。
ExecuteNonQuery文档:
对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数对于所有其他类型的语句,返回值为-1。
因此,这将不起作用:
int count = cmd.ExecuteNonQuery();
您可以使用ExecuteScalar:
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = "select count(*) from ...";
int count = Convert.ToInt32(cmd.ExecuteScalar());
除了使用参数外,您还试图执行两次命令。不使用循环来计算结果,只需使用SQL Count
来获取结果数。
SQLiteCommand cmd = new SQLiteCommand("select Count(*) from login where username = '"+textbox_id.Text+"' and password ='"+textbox_password.Text+"'", conn);
int count = (int)cmd.ExecuteScalar();
但是,如果有人在你的任何一个文本框中键入类似'; DROP TABLE login
的内容,那么你的数据库就会丢失。更糟糕的是,我可以读取你所有的密码,因为你把它们存储为纯文本(另一个大的"不")。