如何从C#MySQL查询中提取单个列数据?

如何从C#MySQL查询中提取单个列数据?,c#,mysql,C#,Mysql,如何从用户行提取列数据?例如:当客户端登录时,会在我的WCF服务器上调用该函数。它最多工作到var xx=ds.Tables[0]。行[1];在客户端抛出一个错误。基本上,我试图在数据库中验证用户/通行证。然后将其订阅到期的日期时间返回给客户端 public bool Authenticate(string userId, string password, out string token) { token = ""; string MyConnecti

如何从用户行提取列数据?例如:当客户端登录时,会在我的WCF服务器上调用该函数。它最多工作到var xx=ds.Tables[0]。行[1];在客户端抛出一个错误。基本上,我试图在数据库中验证用户/通行证。然后将其订阅到期的日期时间返回给客户端

public bool Authenticate(string userId, string password, out string token)
    {
        token = "";

        string MyConnectionString = "Server=localhost;Database=testdb;Uid=root;Pwd=admin;";
        MySqlConnection sqlCon = new MySqlConnection(MyConnectionString);
        sqlCon.Open();

        MySqlCommand cmd = sqlCon.CreateCommand();
        cmd.CommandText = "SELECT * FROM table1 WHERE username = '"+userId+"' AND password = '"+password+"'";
        MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        adap.Fill(ds);


        if (ds.Tables[0].Rows.Count > 0)
        {
            token = Guid.NewGuid().ToString();
            var xx = ds.Tables[0].Rows[0];


            CustomDataSource.AddUserData(token, userId);

            return true;
        }

        return false;
    }

var xx=ds.Tables[0]。行[0]。ItemArray[5]


是这样的。

我假设您的查询只返回一行(如果它找到了密码正确的用户)

在这种情况下,您将从返回的第一行(索引零)获取日期。
我还假设您的日期存储在第五列(索引4),如果不是,您应该调整第二个索引以指向正确的列。(基数组索引始终为零)

话虽如此,让我指出这段代码的一个大问题。
这段代码可以很容易地用于,因为它连接字符串(可能是用户键入的)以形成传递给数据库引擎的Sql文本。相反,您应该使用参数来避免Sql注入问题和引用用户文本(带撇号的密码?)


尝试使用
foreach
循环

foreach (DataRow row in ds.Tables[0].Rows) 
{
    var xx = row[1];
    var x = row[5];

    // other codes

    return true;
}
还有一件事,参数化查询以避免
SQL注入

using(MySqlConnection sqlCon = new MySqlConnection(MyConnectionString))
{
    using (MySqlCommand cmd = new MySqlCommand())
    {
        cmd.Connection = sqlCon;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "SELECT * FROM table1 WHERE username = @user AND password = @pass";
        cmd.Parameters.AddWithValue("@user", userId);
        cmd.Parameters.AddWithValue("@pass", password);
        using (MySqlDataAdapter adap = new MySqlDataAdapter(cmd))
        {
            try
            {
                DataSet ds = new DataSet();
                adap.Fill(ds);
            }
            catch (MySqlException e)
            {
                // do something with the exception
                // don't hide it!
            }
        }
    }
}
foreach (DataRow row in ds.Tables[0].Rows) 
{
    var xx = row[1];
    var x = row[5];

    // other codes

    return true;
}
using(MySqlConnection sqlCon = new MySqlConnection(MyConnectionString))
{
    using (MySqlCommand cmd = new MySqlCommand())
    {
        cmd.Connection = sqlCon;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "SELECT * FROM table1 WHERE username = @user AND password = @pass";
        cmd.Parameters.AddWithValue("@user", userId);
        cmd.Parameters.AddWithValue("@pass", password);
        using (MySqlDataAdapter adap = new MySqlDataAdapter(cmd))
        {
            try
            {
                DataSet ds = new DataSet();
                adap.Fill(ds);
            }
            catch (MySqlException e)
            {
                // do something with the exception
                // don't hide it!
            }
        }
    }
}