在我的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中选择员工详细信息,这两个都在我的单窗口应用程序中使用,那么我应该怎么做?

在我的windows应用程序中从SQL Server 2008 R2访问多个数据库

您最好尝试将实体保存在一个数据库中,但如果由于某种原因您不能或不想这样做,解决方案是在应用程序中使用多个连接字符串。

,并基于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.configweb.config

或者在您的查询顶部添加USE MyDbName,当没有在您的connectionstringUSE 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();
}
}