将数据库 sql server 2008 链接到 Visual Studio 2010

Posted

技术标签:

【中文标题】将数据库 sql server 2008 链接到 Visual Studio 2010【英文标题】:Linked database sql server 2008 to visual studio 2010 【发布时间】:2017-12-29 17:14:23 【问题描述】:

我正在做一个可以管理电子元件数量的软件。我的软件链接到第一个 DB (T_importReel),当工厂收到所有新卷轴组件时,它将包含它们。使用组件的机器正在计算它在每个卷轴中使用了多少,并在自己的数据库 (SiplaceSetupCenter) 中标记了计数。我为每个卷轴使用唯一 ID,因此 T_importReel 和 SiplaceSetupCenter 使用该唯一 ID 来区分每个线轴。基本上,我在两个数据库中有两个相同的列。

现在我想用一个简单的 SQL 请求来链接这两个数据库。这应该很简单:对于两个 DB 之间数量不同的每个唯一 ID,T_importReel 会针对相关的唯一 ID 更改其数量。

但是当我尝试这样做时,我的软件没有访问 DB_center... 如何使我的软件能够访问 SetUpCenter?我该怎么做才能更新 T_importreels? 提前谢谢你。

 private void BT_croiserlesdonnées_Click(object sender, EventArgs e)
  

     SqlConnection con = new SqlConnection("Server=SIPLACESERVER;Database=SiplaceSetupCenter;User=**;Password=****;");
      con.Open();
      // using (SqlCommand command = new SqlCommand(
      //      "SELECT packagingunitid,Quantity FROM PackagingUnit",
      //      con))
      //using (SqlDataReader reader = command.ExecuteReader())
      //      
      //          while (reader.Read())
      //          
      //              for (int i = 0; i < reader.FieldCount; i++)
      //              
      //                  Console.WriteLine(reader.GetValue(i));
      //              
      //              Console.WriteLine();
      //          
      //      

     string queryString = 
          "Select Quantity FROM PackagingUnit, T_ImportReels WHERE PackagingUnit.id = T_ImportReels.id";
      SqlCommand command = new SqlCommand(
        queryString, con);

    SqlDataReader reader = command.ExecuteReader();
    try
    
        while (reader.Read())
        
            Console.WriteLine(String.Format("0, 1",
                reader[0], reader[1]));
        
    
    finally
    
        // Always call Close when done reading.
        reader.Close();
    

      //_siplaceSetupCenter = new SiplaceSetupCenterEntities();
      //string queryString = @"SELECT * FROM PackagingUnit";

      //using (SiplaceSetupCenterEntities context = new SiplaceSetupCenterEntities())
      //


      //    //ObjectQuery<PackagingUnit> contactQuery =_siplaceSetupCenter.CreateQuery<PackagingUnit>(queryString);
      //    // new ObjectParameter("fn", "Frances"));
      //    Console.WriteLine("on y go"); Console.WriteLine("on y go"); Console.WriteLine("on y go"); Console.WriteLine("on y go");
      //    var tableresult = _siplaceSetupCenter.PackagingUnit.FirstOrDefault(id => id.PackagingUnitId == "100717132736");



          //var contactQuery = from contact in context.PackagingUnit
          //                   where contact.PackagingUnitId == "200717100643"
          //                   select contact;
          //// Iterate through the collection of Contact items.
          //foreach (PackagingUnit result in contactQuery)
          //    Console.WriteLine("First Name: 0, Last Name: 1",result.PackagingUnitId, result.Quantity);
          //Console.WriteLine(table_result.Count); Console.WriteLine(table_result.Count); Console.WriteLine(table_result.Count); Console.WriteLine(table_result.Count);
          //foreach (var value in table_result)
          //
          //    Console.WriteLine(value); Console.WriteLine(value); Console.WriteLine(value); Console.WriteLine(value);
          //    Console.WriteLine("a"); Console.WriteLine("a"); Console.WriteLine("a"); Console.WriteLine("a");
          //

          //string dataid = tableresult.PackagingUnitId;
          //Console.WriteLine(dataid);
      
  

【问题讨论】:

假设您的数据库位于不同的服务器上,如果它们位于同一服务器上,您正在寻找链接服务器功能 (docs.microsoft.com/en-us/sql/relational-databases/…),请参阅:mssqltips.com/sqlservertip/1095/sql-server-four-part-naming 【参考方案1】:

我不知道它对你有什么帮助? 您可以建立两个连接,每个连接到每个数据库,然后从两个 Db 中选择您的数据。在这种情况下,您有 2 个 DataTable/SqlDataReader 对象。现在,您可以逐行比较这些 Datatables/SqlDataReader,或者将它们组合成一个单独的 datatable/SqlDataReader,或者相互更新。

【讨论】:

我已经完成了两个连接,用于 T_importreels 的 model1.edmx 和用于 SiplaceSetupcenter 的 model2.edmx。在每个模型中,我都有需要的表和列。但我不知道为什么我无法访问 Siplacesetupcenter。我像第一个数据库一样尝试:_Siplace= new DB_SiplaceSetupCenterEntities(); var enregistrement = _Siplace.PackagingUnit.First(variable => variable.PackagingUnitId== "240717103125"; dataFour = enregistrement.PackagingUnitId; 但即使该唯一 ID 是数据库,它也不会返回任何内容。 您是从 2 个连接变量中使用,还是从一个变量中使用并且只更改 ConnectionString? 我评论中的代码行不需要任何连接字符串,它只是这里的 UniqueID 导致问题,我刚刚测试了 variable.Quantity != 500 并找到了引用。所以,我不明白......而且我将需要执行 sql 请求以在 DB 之间交叉数据。 试试这个:选择 PackagingUnit.Quantity 作为 pQuantity,T_ImportReels.Quantity 作为 tQuantity From ....【参考方案2】:

Sql Server 的名称应该是这样的 SERVERNAME\INSTANCENAME。但是您的服务器名称是:SIPLACESERVER/SIPLACE_2012EX。

如果您在服务器名称中使用“\”字符,则在连接字符串中将其更改为“\\”。 我的意思是将SERVERNAME\INSTANCENAME 更改为SERVERNAME\\INSTANCENAME

【讨论】:

以上是关于将数据库 sql server 2008 链接到 Visual Studio 2010的主要内容,如果未能解决你的问题,请参考以下文章

将 SQL Server 2008 r2 降级到 SQL Server 2008

将 SQL Server 2008 降级到 SQL Server 2005

访问 db 和 sql server 2008 表达我如何链接它们[关闭]

将sybase存储过程作为链接服务器过程sql server 2008执行

将数据库从 SQL Server 2012 转移到 SQL Server 2008 [关闭]

如何将所有数据库(快速)自 sql server 2008 express 传递到 sql server 2008 R2(无 express)