C# 本地 SQL 行返回 if 语句

标签 c# .net sql-server sql-server-ce sqlcommand

我正在尝试让我的登录系统正常工作。目前我认为除了 if 语句条件(如果返回行,则 if 语句为真,否则登录不成功)之外,我已经准备就绪,可以正常工作。我不确定如何读取返回的行数,我确实尝试使用 ExecuteReader 方法但无法使其工作。 感谢任何帮助,谢谢。

代码:

private void btn_login_Click(object sender, EventArgs e)
{
    SqlCeConnection connection = new SqlCeConnection(@"Data Source=C:\\temp\\Project\\WindowsFormsApplication2\\Database.sdf");

    connection.Open();

    SqlCeCommand command = new SqlCeCommand("SELECT * FROM Technician WHERE Name = '" + txt_username.Text + "' AND Password = '" + txt_password.Text + "' ");
    SqlCeDataAdapter dataAdapter = new SqlCeDataAdapter(command);

    if ()
    {
        MessageBox.Show("Login Successful");
        System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(MainMenuForm));
        t.Start();
        this.Close();
    }
    else
    {
        MessageBox.Show("Login Unsuccessful");
        return;
    }

    connection.Close();
}

最佳答案

我已经更改了您的代码以使用更简单的 ExecuteScalar,它返回您的查询获得的第一行的第一列

当然,不要编写连接字符串的 sql 命令是极其重要的,因为这可能会以惊人的方式失败。 (如果你的文本框包含一个单引号,如果你的用户写 malicious text like this

using(SqlCeConnection connection = new SqlCeConnection(.....)) 
{
     connection.Open();
     string sqlText = "SELECT Count(*) FROM Technician WHERE Name = @name AND Password=@pwd"
     SqlCeCommand command = new SqlCeCommand(sqlText, connection);
     command.Parameters.AddWithValue("@name", txt_username.Text);
     command.Parameters.AddWithValue("@pwd", txt_password.Text);
     int result = (int)command.ExecuteScalar();
     if (result > 0)
     {
          MessageBox.Show("Login Successful");
          System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(MainMenuForm));
          t.Start();
          this.Close();
     }
     else
     {
           MessageBox.Show("Login Unsuccessful");
           return;
     }
 }

另请注意 using 语句,在您之前的代码中,如果未找到登录但您忘记关闭连接,您将退出该过程。在您的应用程序的生命周期中,这可能会成为一个大问题。 Using 语句阻止了这种情况

现在我应该开始谈论以明文形式存储和传输密码的弱点,但那是另一回事

关于C# 本地 SQL 行返回 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16103653/

相关文章:

c# - 如何在 C# 中使用 LINQ to XML 检查 XDocument 中的属性是否存在

java - 从 Java 登录到 MSSQL 服务器的问题

C# 'select count' sql 命令错误地从 sql server 返回零行

sql - 针对 2 个不同值的单选 SQL 语句

c# - HttpClient POST 生成 GET 而不是

c# - 如何从幻灯片中获取 SmartArt 信息(文本、名称、类型)?

.net - 使用 AutoReset = False 时,计时器在停止后仍在滴答作响

c# - 使用 Entity Framework 是否可以创建一个未映射到我的数据库表上的实体?

c# - 在 EFCore 预加载 LINQ 查询中,如何在 ThenInclude() 表达式中引用顶级实体?

c# - 对抗性搜索问题