c# -从两个表中选择数据到数据集

本文关键字:选择 数据 数据集 两个 | 更新日期: 2023-09-27 18:15:52

我的数据库中有两个表(Users和Cities),我想选择Users表中列UserID=1的所有数据。

但是数据集没有找到我的表(用户和城市)

这是我的SQL查询:
SELECT * FROM Users INNER JOIN Cities ON Cities.CityID=Users.CityID WHERE Users.UserID=1

这是方法:

public static DataSet GetData(string SqlQuery)
{
    OleDbConnection con = new OleDbConnection(conString);
    OleDbCommand cmd = new OleDbCommand(SqlQuery, con);
    OleDbDataAdapter da = new OleDbDataAdapter(cmd);
    DataSet ds = new DataSet();
    da.Fill(ds);
    return ds;
}
代码:

    DataSet ds = GetData(myQuery);
    string fname = ds.Tables["Users"].Rows[0]["UserFisrtName"].ToString();
    string lname = ds.Tables["Users"].Rows[0]["UserLastName"].ToString();
    string city = ds.Tables["Cities"].Rows[0]["CityName"].ToString();
    string output = "Name: " + fname + " " + lname + " City: " + city;

c# -从两个表中选择数据到数据集

如果数据集中需要2个数据表,请将sql查询更改为:

SELECT * FROM Users WHERE Users.UserID=1; select * from City where CityID in (Select cityid from users where userID = 1);

用户表将在ds上。表[0]和ds.Tables[1]上的城市表。

请记住使用using子句来确保连接等被正确处理。

public static DataSet GetData(string SqlQuery)
{
    using(var con = new OleDbConnection(conString))
    using(var cmd = new OleDbCommand(SqlQuery, con))
    using(var da = new OleDbDataAdapter(cmd))
    {
        var ds = new DataSet();
        da.Fill(ds);
        return ds;
    }
}
代码:

var ds = GetData(myQuery);
var fname = ds.Tables[0].Rows[0]["UserFisrtName"].ToString();
var lname = ds.Tables[0].Rows[0]["UserLastName"].ToString();
var city = ds.Tables[1].Rows[0]["CityName"].ToString();
var output = "Name: " + fname + " " + lname + " City: " + city;

我找到了答案,在sql查询

SELECT * FROM Users, Cities WHERE Users.CityID=Cities.CityID AND Users.UserID=1

只使用一个表填充数据集,这是因为Sql语句只返回一组数据。对于使用索引访问的表,只有列名会映射到表的行中,因此可以通过索引或名称访问这些值。

SELECT * FROM Users INNER JOIN Cities ON Cities.CityID=Users.CityID WHERE Users.UserID=1

也要避免使用SELECT *,因为您强制数据库引擎搜索所有表的列,而不是只使用您已经提供的列,如果您不使用所有列或有人更改表中的列顺序,可能会成为将来的问题。

在数据集中,您的表不会自动具有从中选择它们的表的名称。用序数代替:

DataSet ds = GetData(myQuery);
string fname = ds.Tables[0].Rows[0]["UserFisrtName"].ToString();
string lname = ds.Tables[0].Rows[0]["UserLastName"].ToString();
string city = ds.Tables[0].Rows[0]["CityName"].ToString();
string output = "Name: " + fname + " " + lname + " City: " + city;