一、如果两个表间没有关系,那么这种“合成”就是毫无意义的。你说的那两个表既不在同一个database中又没有任何一列是相同的,这说明它们没任何关系,所以你所要求的“合成”,根本无效。二、如果两表存在关系,比如是一对多的关系,打个比方,表student和scores。它们的结构大致如下: student: StudentID(PK) FirstName LastName ... scores: ScoreID(PK) ClassName Score StudentID(FK) ... 一对多的关系是通过scores表中的外键(FK)实现的。这时所谓的“合成”,就是要根据它们的关系将两个表的信息统一在一起。比如“某位学生的分数列表”,“某科所有学生的分数列表”,“某个分数段的所有学生列表”等。对应的SQL语句分别为:某位学生的分数列表: SELECT student.StudentID AS 学号, student.FirstName AS 名, student.LastName AS 姓, scores.ClassName AS 科目, scores.Score AS 成绩 FROM scores RIGHT OUTER JOIN student ON student.StudentID = scores.StudentID WHERE (student.StudentID = '学号')某科所有学生的分数列表: SELECT student.StudentID AS 学号, student.FirstName AS 名, student.LastName AS 姓, scores.ClassName AS 科目, scores.Score AS 成绩 FROM scores RIGHT OUTER JOIN student ON student.StudentID = scores.StudentID WHERE (scores.ClassName = '科目名称')某个分数段的所有学生列表: SELECT student.StudentID AS 学号, student.FirstName AS 名, student.LastName AS 姓, scores.ClassName AS 科目, scores.Score AS 成绩 FROM scores RIGHT OUTER JOIN student ON student.StudentID = scores.StudentID WHERE (scores.Score BETWEEN 分数1 AND 分数2)三、同时,上面的SQL语句中已经将列名替换为其他名字,如"student.StudentID"被替换为"学号",这样在通过ado.net读出来的无论是DataSet还是DataReader,相应的列名称都被转换成了新定义的名字。四、用C#编制数据绑定的代码,如下: 假设已经有了两个建立在SQLSERVER上的数据库db1 和db2,表student在db1中,表scores在db2中,表结构如上所述。在c#的winform工程中,已经加入了一个名为MyConn的SqlConnection,无论它连接的是db1还是db2都没有关系,只要连接所用的用户对两个表都有查询权限及可,还有一个datagrid对象MyDataGrid。此时要将“某位学生的分数列表”读出,可以参考如下代码:...... using System.Data.SqlClient; using System.Text;...... //SELECT SC.StudentID AS 学号, // ST.FirstName AS 名, // ST.LastName AS 姓, // SC.ClassName AS 科目, // SC.Score AS 成绩 //FROM db2.dbo.scores SC RIGHT OUTER JOIN // db1.dbo.student ST ON SC.StudentID = ST.StudentID //WHERE (ST.StudentID = '学号')String strSql = new StringBuilder("SELECT SC.StudentID AS 学号, ") .Append("ST.FirstName AS 名, ") .Append("ST.LastName AS 姓, ") .Append("SC.ClassName AS 科目, ") .Append("SC.Score AS 成绩 ") .Append("FROM db2.dbo.scores SC RIGHT OUTER JOIN ") .Append("db1.dbo.student ST ON SC.StudentID = ST.StudentID ") .Append("WHERE (ST.StudentID = '学号') ") .ToString();SqlDataAdapter adp = new SqlDataAdapter(strSql,MyConn); DataSet ds = new DataSet(); adp.Fill(ds,"MyTable");MyDataGrid.DataSource = ds.Tables["MyTable"].DefaultView;.... 我已经编译通过,你可以试试。 留个email,我把我的c#工程文件给你发过去。
可以用select * from 表1 inner join 表2 on 表1.ID = 表2.ID填充到DataSet中啊
DataColumn c2 = ds.Tables["Territories"].Columns["employeeid"];
DataRelation rel = new DataRelation("EmployeesToTerritories",
c1, c2);
ds.Relations.Add(rel); //关联示例
创建一个临时表来存储这个查询出来的纪录,
最后在查询这个临时表,用datagrid来显示。
绝对可行~~~
2、表的列名没有相同的
3、查询的结果怎么合成一个表
4、合成后的表的列名怎样改称我所需要的名称
5、改完后怎样填到datagrid里面去谢谢!!!
student:
StudentID(PK)
FirstName
LastName
...
scores:
ScoreID(PK)
ClassName
Score
StudentID(FK)
...
一对多的关系是通过scores表中的外键(FK)实现的。这时所谓的“合成”,就是要根据它们的关系将两个表的信息统一在一起。比如“某位学生的分数列表”,“某科所有学生的分数列表”,“某个分数段的所有学生列表”等。对应的SQL语句分别为:某位学生的分数列表:
SELECT student.StudentID AS 学号,
student.FirstName AS 名,
student.LastName AS 姓,
scores.ClassName AS 科目,
scores.Score AS 成绩
FROM scores RIGHT OUTER JOIN student
ON student.StudentID = scores.StudentID
WHERE (student.StudentID = '学号')某科所有学生的分数列表:
SELECT student.StudentID AS 学号,
student.FirstName AS 名,
student.LastName AS 姓,
scores.ClassName AS 科目,
scores.Score AS 成绩
FROM scores RIGHT OUTER JOIN student
ON student.StudentID = scores.StudentID
WHERE (scores.ClassName = '科目名称')某个分数段的所有学生列表:
SELECT student.StudentID AS 学号,
student.FirstName AS 名,
student.LastName AS 姓,
scores.ClassName AS 科目,
scores.Score AS 成绩
FROM scores RIGHT OUTER JOIN student
ON student.StudentID = scores.StudentID
WHERE (scores.Score BETWEEN 分数1 AND 分数2)三、同时,上面的SQL语句中已经将列名替换为其他名字,如"student.StudentID"被替换为"学号",这样在通过ado.net读出来的无论是DataSet还是DataReader,相应的列名称都被转换成了新定义的名字。四、用C#编制数据绑定的代码,如下: 假设已经有了两个建立在SQLSERVER上的数据库db1 和db2,表student在db1中,表scores在db2中,表结构如上所述。在c#的winform工程中,已经加入了一个名为MyConn的SqlConnection,无论它连接的是db1还是db2都没有关系,只要连接所用的用户对两个表都有查询权限及可,还有一个datagrid对象MyDataGrid。此时要将“某位学生的分数列表”读出,可以参考如下代码:......
using System.Data.SqlClient;
using System.Text;......
//SELECT SC.StudentID AS 学号,
// ST.FirstName AS 名,
// ST.LastName AS 姓,
// SC.ClassName AS 科目,
// SC.Score AS 成绩
//FROM db2.dbo.scores SC RIGHT OUTER JOIN
// db1.dbo.student ST ON SC.StudentID = ST.StudentID
//WHERE (ST.StudentID = '学号')String strSql = new StringBuilder("SELECT SC.StudentID AS 学号, ")
.Append("ST.FirstName AS 名, ")
.Append("ST.LastName AS 姓, ")
.Append("SC.ClassName AS 科目, ")
.Append("SC.Score AS 成绩 ")
.Append("FROM db2.dbo.scores SC RIGHT OUTER JOIN ")
.Append("db1.dbo.student ST ON SC.StudentID = ST.StudentID ")
.Append("WHERE (ST.StudentID = '学号') ")
.ToString();SqlDataAdapter adp = new SqlDataAdapter(strSql,MyConn);
DataSet ds = new DataSet();
adp.Fill(ds,"MyTable");MyDataGrid.DataSource = ds.Tables["MyTable"].DefaultView;....
我已经编译通过,你可以试试。
留个email,我把我的c#工程文件给你发过去。