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;
如果数据集中需要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;