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

标签 c# mysql

如何从我的用户行中提取列数据? EX:当客户端登录时,这会在我的 WCF 服务器上调用。它可以达到 var xx = ds.Tables[0].Rows[1];它在客户端抛出错误。基本上我试图在数据库中验证用户/密码。然后向客户返回订阅到期的 DateTime。

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;
    }

最佳答案

好吧,我想你的查询只返回一行(如果它找到密码正确的用户)

在这种情况下,您会从返回的第一行(索引为零)中获取日期。
此外,我假设您的日期存储在第五列(索引四)中,否则您应该调整第二个索引以指向正确的列。 (基本数组索引始终为零)

if (ds.Tables[0].Rows.Count > 0)
{
    token = Guid.NewGuid().ToString();
    var xx = ds.Tables[0].Rows[0][4];
    CustomDataSource.AddUserData(token, userId);
    return true;
}

说到这里,让我指出这段代码的一个大问题。
此代码可以轻松用于 Sql Injection Attack因为它连接字符串(可能由您的用户键入)以形成传递给数据库引擎的 Sql 文本。相反,您应该使用参数来避免 Sql 注入(inject)问题和用户文本的引用(带撇号的密码?)

    using(MySqlConnection sqlCon = new MySqlConnection(MyConnectionString))
    {
        sqlCon.Open();
        MySqlCommand cmd = sqlCon.CreateCommand();
        cmd.CommandText = "SELECT * FROM table1 WHERE username = ?user AND password = ?pwd";
        cmd.Parameters.AddWithValue("?user", userId);
        cmd.Parameters.AddWithValue("?pwd", password);
        using(MySqlDataAdapter adap = new MySqlDataAdapter(cmd))
        {
            DataSet ds = new DataSet();
            adap.Fill(ds);
        }
    }

关于c# - 如何从 C# MySQL 查询中提取单个列数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13299825/

相关文章:

c# - 将 XElement 的子元素转换为字符串

c# - 在 Docx 文件*周围*运行中的文本中插入注释

mysql - "Instead of"mysql中的触发器

php - 使用 PHP 和 MySQL 的 jQuery 倒计时

php - MYSQL解析为XML代码

c# - 使用 smtpClient.send 显示进度条

c# - 如何使用 asp.net C# 将命令提示符输出重定向到文件?

MySQL 存储 float

C#实现垂直自动隐藏工具栏的方法

mysql - 按年份范围分组