gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:54:59 26 4
gpt4 key购买 nike

如何从我的用户行中提取列数据? 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com