C#-Windows窗体-SQLite-SQL语句语法



这是我的代码。我想检查一下这个帐户是否已激活。在我的数据库中,有一列";激活";。如果值为NULL,则不会激活帐户。如果有1,它将被激活。但是如果我把一个值加到变量"0"上;用户名";错误:

"SQLite error (1): no such column: Lucas in "SELECT benutzername, aktivierung FROM anmeldung WHERE benutzername=Lucas AND aktivierung IS NULL"
string username = txtbox_benutzername.Text;
lookActivate(username);
if (variable.aktivierung == 1)
{
MessageBox.Show("variable.aktivierung");
variable.aktivierung = 0;
}
public static void lookActivate(string username)
{
try
{ 
string cs = @"URI=file:C:/Users/lucas/source/repos/Anmelddung/Anmelddung/database.db";
var con = new SQLiteConnection(cs);
con.Open();
const string quote = """;
string stm = "SELECT benutzername, aktivierung FROM anmeldung WHERE benutzername=" + username + " AND aktivierung IS NOT NULL";
Console.WriteLine(stm);
var cmd = new SQLiteCommand(stm, con);
SQLiteDataReader rdr = cmd.ExecuteReader();

while (rdr.Read())
{
username = rdr.GetString(0);
variable.aktivierung = rdr.GetInt32(1);
Console.WriteLine(username, variable.aktivierung);
MessageBox.Show($"{rdr.GetString(0)} {rdr.GetInt32(1)}");
}
}
catch
{
MessageBox.Show("Ihr Konto wurde wohl noch nicht von einem Administrator freigegeben");
}
}
static class variable
{
public static int aktivierung;
}

您的代码失败是因为您在连接到sql查询中的字符串周围缺少单引号,所以SQLite将其作为列名而不是文字字符串。

您应该只使用参数化查询。这可以在后台为您处理转义,防止SQL注入,并使您的代码更简单、更高效:

var con = new SQLiteConnection(cs);
con.Open();
string stm = "SELECT benutzername, aktivierung FROM anmeldung WHERE benutzername= ? AND aktivierung IS NOT NULL";
Console.WriteLine(stm);
var cmd = new SQLiteCommand(stm, con);
cmd.Parameters.Add(username, SqlDbType.VarChar);
SQLiteDataReader rdr = cmd.ExecuteReader();

您可能需要根据数据库列的实际数据类型调整参数的sql类型。

最新更新