none
获取sql的实例名称出错 RRS feed

  • 问题

  • VB.net中为了随时获取sql数据库的实例名称使用了以下代码:

                Dim dataSources As New DataTable
                dataSources = SqlClient.SqlClientFactory.Instance.CreateDataSourceEnumerator.GetDataSources
                 MsgBox(dataSources.Rows.Count)
                If dataSources.Rows(0).Item(1).ToString = "SQLEXPRESS" Then
                    connectStringBuilder.DataSource = ".\SQLEXPRESS"
                Else
                    connectStringBuilder.DataSource = "(local)"
                End If

    在vs2010中使用良好,最近换了vs2012后发现出了问题,msgbox反馈表格的记录数是0,也就是没有记录,奇了怪了,这个方法那里出错了?

    2014年2月21日 7:32

答案

全部回复

  • 说明本地机器的SQL都没有实例名(只有一个local的),或者没有安装SQL,或者全部带有实例名的SQL服务器进程尚未启动,无法被检测出。

    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2014年2月23日 8:32
    版主
  • 已经安装了SQL2012。

    如果是,应该就可以联结。

    不知道是那个服务没有启动,能帮我看看吗?

    2014年2月24日 16:04
  • Please try to have a look on this, you can use row["ServerName"] or row["InstanceName"] to make sure that it is the one you want to collect.

    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlclientfactory.createdatasourceenumerator(v=vs.110).aspx


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    2014年2月25日 4:33
  • 楼主:那应该你没有实例名吧,只有local(也就是英文句点)。


    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2014年2月25日 8:03
    版主
  • 神了,真的就是一个英文句点,用老方法怎么都检测不出来这个实例名称,居然就是"."。真长姿势。

    不过奇怪了,在另外一台机器上面没有实例名称的时候是使用“(local)”来表示实例的。

    不过每次都要猜的话太费劲,要是直接从程序里判断出来就好了。

    那个楼上提出来用这个来获取实例列表,但是操作提示失败,原因是没有指定实例,不知道如何使用,请继续指教。多谢。

     If factory.CanCreateDataSourceEnumerator Then
                    Dim instance As Common.DbDataSourceEnumerator = factory.CreateDataSourceEnumerator
                    Dim table As System.Data.DataTable = instance.GetDataSources()
                    Dim row As DataRow
                    For Each row In table.Rows
                        Console.WriteLine("{0}\{1}", _
                         row("ServerName"), row("InstanceName"))
                    Next
    End If

    2014年2月25日 15:43
  • 你好:

    试一下这个MSDN文档中的代码:

    枚举 SQL Server 的实例 (ADO.NET)

    Imports System.Data.Sql
    
    Module Module1
      Sub Main()
        ' Retrieve the enumerator instance and then the data.
        Dim instance As SqlDataSourceEnumerator = _
         SqlDataSourceEnumerator.Instance
        Dim table As System.Data.DataTable = instance.GetDataSources()
    
        ' Display the contents of the table.
        DisplayData(table)
    
        Console.WriteLine("Press any key to continue.")
        Console.ReadKey()
      End Sub
    
      Private Sub DisplayData(ByVal table As DataTable)
        For Each row As DataRow In table.Rows
          For Each col As DataColumn In table.Columns
            Console.WriteLine("{0} = {1}", col.ColumnName, row(col))
          Next
          Console.WriteLine("============================")
        Next
      End Sub
    End Module
    


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年2月27日 7:58
    版主
  • Console我用不到,如果换成msgbox行吗?怎么换?

    2014年2月28日 0:37
  • 你建立一个Console Application然后把示例代码拷贝进去就好了。或者直接把DisplayData方法考到你的测试项目中也可以,调试一下就知道是否能正确获取到SqlServer实例名称了,Console.WriteLine会把信息打印到Output窗口中,在这个窗口中看也行。

    示例代码在我的机器上运行是没有问题的。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年2月28日 9:05
    版主