最近被问道了一个问题,就是如何对两个数据库里面的表进行联合查询。
后来我就用了最笨的方法实现了。希望看到的朋友能给个好的解决方法,只用一个连接字符串。最好是给个详细的教程
首先两个数据库是test1和test2
其中第一个数据库中有个这样的表(学生表):
第二个数据库是这样的表(专业表):
表里面的数据也很简单,就是学生表和专业表,用专业号关联。
下面就在Winfrom的DataGridView上绑定数据,显示学生的编号、姓名、年龄和专业。效果如下:
下面就是绑定数据的代码:- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using System.Data.SqlClient;
- using System.Linq;
- namespace LinkTwoData
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- string strcon1 = @"Data Source=FENG-PC\SQLEXPRESS;Initial Catalog=test1;User ID=sa;PassWord=sa2008";
- string strcon2 = @"Data Source=FENG-PC\SQLEXPRESS;Initial Catalog=test2;User ID=sa;PassWord=sa2008";
- private void Form1_Load(object sender, EventArgs e)
- {
- SqlDataAdapter sda1 = new SqlDataAdapter("select * from stu1",strcon1);
- SqlDataAdapter sda2 = new SqlDataAdapter("select * from stu1", strcon2);
- DataSet ds = new DataSet();
- sda1.Fill(ds,"stu1");
- sda2.Fill(ds, "stu2");
-
- var query = from stu in ds.Tables["stu1"].AsEnumerable()
- from sc in ds.Tables["stu2"].AsEnumerable()
- where stu.Field<int>("sc") == sc.Field<int>("sc")
- select new
- {
- sno = stu.Field<int>("sno",DataRowVersion.Original),
- sname=stu.Field<string>("sname",DataRowVersion.Original),
- sage = stu.Field<int>("sage", DataRowVersion.Original),
- scname = sc.Field<string>("scname", DataRowVersion.Original)
- };
-
- DataTable dt = new DataTable();
- dt.Columns.Add("sno", typeof(int));
- dt.Columns.Add("sname", typeof(string));
- dt.Columns.Add("sage", typeof(string));
- dt.Columns.Add("scname", typeof(string));
- foreach (var item in query)
- {
- DataRow newRow = dt.NewRow();
- newRow["sno"] = item.sno;
- newRow["sname"] = item.sname;
- newRow["sage"] = item.sage;
- newRow["scname"] = item.scname;
- dt.Rows.Add(newRow);
- }
- dataGridView1.DataSource = dt.DefaultView;
- }
- }
- }
复制代码 希望有更好实现这个功能的高手,告诉我一下。 |
-
2.png
(3.86 KB, 下载次数: 14)
-
3.png
(25.25 KB, 下载次数: 16)
|