在我的windows应用程序中从SQL Server 2008 R2访问多个数据库
本文关键字:R2 2008 访问 数据库 Server SQL windows 我的 应用程序 | 更新日期: 2023-09-27 17:49:54
如何在我的windows应用程序中从SQL Server 2008 R2访问多个数据库?
我想在我的Windows应用程序中从单个sqlserver访问多个数据库。例如:我想从DB1中选择学生详细信息,我想从DB2中选择员工详细信息,这两个都在我的单窗口应用程序中使用,那么我应该怎么做?
您最好尝试将实体保存在一个数据库中,但如果由于某种原因您不能或不想这样做,解决方案是在应用程序中使用多个连接字符串。
,并基于ADO。无论你选择什么,都可以有不同的方式来实现。
编辑:这就是我对Linq-to-Sql
的做法
我有两个数据库,每个数据库有一个表,模式如下:
TeachersDB (first Database):
-Teachers {TeacherID [int], TeacherName[string]}
StudentsDB (second Database):
-Students {studententid [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
设置为不同的db。
硬编码在代码中,它们看起来像:
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;")
并对每个特定查询使用connectionstring。这些你也可以添加到你的app.config
或web.config
。
或者在您的查询顶部添加USE MyDbName
,当没有在您的connectionstring
即USE MyDbName SELECT * FROM MyTable
中指定的Initial Catalog
在这种情况下,您将使用相同的connectionstring为两个数据库
创建一个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>
键是设置的名称,在本例中为connectionstring
,并在连接两个数据库检索数据时使用以下命令:
//
// 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)在今天更为流行。
您将需要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();
}
}