C# SQL查询语句

C# SQL查询语句,c#,mysql,C#,Mysql,我正在做一个有一些数据库的C#项目。执行以下函数时出现错误: //Returns true if the username and password are correct. Otherwise it returns false. public bool LogInto(string name, string pass, OleDbConnection cnx) { DataTable res = new DataTable(); OleDbDat

我正在做一个有一些数据库的C#项目。执行以下函数时出现错误:

//Returns true if the username and password are correct. Otherwise it returns false.
    public bool LogInto(string name, string pass, OleDbConnection cnx)
    {
        DataTable res = new DataTable();
        OleDbDataAdapter adp = new OleDbDataAdapter("SELECT User,Password FROM UserPassword WHERE (User='"+name+"' AND Password='"+pass+"')", cnx);
        adp.Fill(res);
        bool found = false;
        String user = Convert.ToString(res.Rows[0]["User"]);
        String password = Convert.ToString(res.Rows[0]["Password"]);
        if (name==user && pass==password)
            found = true;
        return found;
    }
这是完整的函数,但是我得到了一个错误,我只是用和替换了&&。但它仍然不起作用。我发现(“解析查询时出错//令牌号、令牌行偏移量、令牌出错

它有什么问题?我有相同的函数,但不是从数据表中只取一行,而是取整个表,通过一个循环,它看起来就是我们要找的行。然而,我正在尝试这样做,只取我们需要的行,因为它更有效

你们能帮帮我吗?我找不到我的错误。
非常感谢

您对查询有一些问题:

  • SQL中的and运算符是
    ,而不是
    &&
  • 查询对攻击是完全开放的。必须转义字符串才能正确解释为字符串文本
您可以这样做:

string query =
  "SELECT User, Password FROM UserPassword WHERE Username = '" +
  name.Replace("\\", "\\\\").Replace("'", "\\'") +
  "' and Password = '" +
  pass.Replace("\\", "\\\\").Replace("'", "\\'") +
  "'";
注意:这种转义字符串的方法是MySQL特有的。每个数据库都有一组需要转义的不同字符,并且转义方式也不同


如果可能的话,您应该使用参数化查询,而不是将字符串连接到查询中。这样更容易获得正确的结果。

首先,请使用像这样的参数化查询,并继承IDisposable

using(SqlCommand cmd = new SqlCommand())
{
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = @""SELECT up.User, up.Password FROM dbo.UserPassword up WHERE up.Username = @Param1" AND Password = @Param2;
    cmd.Parameters.Add("@Param1", SqlDbType.Varchar).Value = 'ABC';
    .............
}

第二,尝试对其进行加密或散列,web上有很多关于散列和加密的信息

您会遇到什么错误?您能显示完整的代码吗?好的,
WHERE
子句没有
&&&
。您的意思是说
相反?您应该始终使用。这种字符串连接会受到攻击。请不要这样做将您的密码撕成纯文本。您遇到了一个严重问题。请使用查询参数。谢谢您,先生,我要尝试一下。我不明白为什么密码必须在方括号内。谢谢@Guffa@user3780731:实际上,这是不正确的。密码在某些数据库中是保留关键字,但在MySQL中不是。MySQL也使用backticks而不是方括号来指定标识符,以便在需要时使用。