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