如何在我的 Windows 应用程序中从 SQL Server 2008 R2 访问多个数据库?
我想在我的 windows 应用程序中从单个 sqlserver 访问多个数据库。例如:我想从 DB1 中选择学生详细信息,我想从 DB2 中选择员工详细信息,两者都在我的单一 windows 应用程序中使用,我该怎么办?
如何在我的 Windows 应用程序中从 SQL Server 2008 R2 访问多个数据库?
我想在我的 windows 应用程序中从单个 sqlserver 访问多个数据库。例如:我想从 DB1 中选择学生详细信息,我想从 DB2 中选择员工详细信息,两者都在我的单一 windows 应用程序中使用,我该怎么办?
您最好尝试将实体保存在一个数据库中,但如果由于某种原因您不能或不想这样做,解决方案是在您的应用程序中使用多个连接字符串。
并且根据您选择的 ADO.Net 选择,可以有不同的方法来实现。
编辑:这就是我的做法Linq-to-Sql
我有两个数据库,每个数据库都有一个表,这是架构:
TeachersDB(第一个数据库):-
Teachers {TeacherID [int], TeacherName[string]}
StudentsDB(第二个数据库): -Students
{StudentID [int], TeacherID[int] StudentName[string]}
StudentsDataContext studentsDB = new StudentsDataContext();
TeachersDataContext teachersDB = new TeachersDataContext();
所以每个学生都有一个老师(为了简单起见)
Student st;
Teacher t;
st = (from stu in studentsDB.Students
where stu.StudentID == int.Parse(txtStudentID.Text)
select stu).SingleOrDefault<Student>();
t = (from teach in teachersDB.Teachers
where teach.TeacherID == st.TeacherID
select teach).SingleOrDefault<Teacher>();
MessageBox.Show(t.TeacherName);
如您所见,我从两个表(每个表都在一个单独的数据库中)获取数据并将它们保存在内存中(类对象 st 和 t),然后与它们一起工作并找到学生老师。
我希望它有所帮助。
为此,您可以使用不同connectionstrings
的方式将 设置initial catalog
为不同的数据库。
硬编码在代码中,它们看起来像:
SqlConnection conn1 = new SqlConnection("Data Source=YourServer;Initial Catalog=Db1;User Id=user;Password=pass;")
SqlConnection conn2 = new SqlConnection("Data Source=YourServer;Initial Catalog=Db2;User Id=user;Password=pass;")
并为每个特定查询使用连接字符串。那些你也可以添加到你的app.config
orweb.config
中。
或者当您的ie中USE MyDbName
没有Initial Catalog
指定时,在您的查询顶部添加一个。在这种情况下,您将为两个数据库使用相同的连接字符串。connectionstring
USE MyDbName SELECT * FROM MyTable
您将需要 2 个连接字符串,根据您的需要将其发送到该方法,并将您的网格/数据连接到任何需要的地方。
using(SqlConnection connection = new SqlConnection(<connstring>))
{
connection.Open();
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = <query1>;
using(SqlDataReader reader = command.ExecuteReader())
{
DataGrid1.DataSource = reader;
DataGrid1.DataBind();
}
command.CommandText = <query2>;
using(SqlDataReader reader = command.ExecuteReader())
{
DataGrid2.DataSource = reader;
DataGrid2.DataBind();
}
}
创建一个 App.Config 文件并在 appsettings 中添加以下内容:
<appSettings>
<add key="appDSN" value="data source=SERVER-NAME;initial catalog=StudentDB;integrated security=SSPI;persist security info=False;packet size=4096" />
<add key="appDSN2" value="data source=SERVER-NAME2;initial catalog=EmpolyeeDB;integrated security=SSPI;persist security info=False;packet size=4096" />
</appSettings>
键是您给设置的名称,在这种情况下,值是连接字符串
并在连接以从两个数据库中检索数据时使用以下内容:
//
// In a using statement, acquire the SqlConnection as a resource.
//
using (SqlConnection con = new SqlConnection(ConfigurationSettings.AppSettings["appDSN1"]))
{
//
// Open the SqlConnection.
//
con.Open();
//
// The following code shows how you can use an SqlCommand based on the SqlConnection.
//
using (SqlCommand command = new SqlCommand("SELECT * FROM Students", con))
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
//read through the first database
}
}
}
//
// In a using statement, acquire the SqlConnection as a resource.
//
using (SqlConnection con = new SqlConnection(ConfigurationSettings.AppSettings["appDSN2"]))
{
//
// Open the SqlConnection.
//
con.Open();
//
// The following code shows how you can use an SqlCommand based on the SqlConnection.
//
using (SqlCommand command = new SqlCommand("SELECT * FROM employees", con))
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
//read through the second database
}
}
这是使用 sqlreader 的简单而古老的方法。今天更多的是使用 mahdi tahsildari 方式(Linq to SQL)。