使用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");
        }

我尝试过使用参数,但结果是一样的,什么都没发生,没有错误,但由于某种未知原因,计数没有增加。

使用SQLite在c#中登录

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的内容,那么你的数据库就会丢失。更糟糕的是,我可以读取你所有的密码,因为你把它们存储为纯文本(另一个大的"不")。