Alex's Weblog

Weblog di Ermanno Goletto (Codename Alex - A Learning EXperience)
posts - 438, comments - 4214, trackbacks - 294

My Links

News

Il blog è stato
trasferito al
 seguente link:


DevAdmin Blog

Add my blog to Live

Foto

Curriculum Vitae


Il contenuto di questo blog e di ciascun post viene fornito “così come é”, senza garanzie, e non conferisce alcun diritto. Questo blog riporta il mio personale pensiero che non riflette necessariamente il pensiero del mio datore di lavoro.

Logo Creative Commons Deed


Logo MCTS

Logo MCSA

Logo MCP

Logo Microsoft Certified Business Management Solutions Professional

Microsoft Certified Business Management Solutions Specialist


Logo UGIdotNET UGIdotNET Contributor


Logo UGISS UGISS Contributor


Logo SysAdmin.it SysAdmin.it Staff


Article Categories

Archives

Post Categories

Blogs

Database

Development

Friends

IT

Knowledge Base

Links

MBS

MCP

MVP Sites

User Groups

Virtualization

Ottenere l'elenco dei database Navision su un'istanza SQL Server (Review)

Se si osserva il comportamente del client di Navison quando apre un database SQL Server si nota che vengono visualizzati solo i database di Navision a cui si può accedere con le credenziali fornite e non tutti quelli dell'istanza.
Questo ci porta a fare la considerazione che il controllo viene fatto fatto sul database dove infatti troviamo la tabella $ndo$dbproperty che contiene un solo record con le informazioni di Navision (ad esempio nella colonna databaseversionno troviamo la versione).

Quindi per ottenere l'informazione possimao ricavare l'elenco dei database a cui si ha diritto di accedere con le credenziali fornite e controllare poi l'esistenza della tabella $ndo$dbproperty.

Il seguente codice scritto in VB.NET 2005 ottiene l'elenco dei database (esclusi quelli di sistema) per un'istanza di SQL Server a cui sia ha accesso tramite le credenziali fornite (un graze all'MVP Andrea Benedetti per avermi indicato la funzione HAS_DBACCESS) e quindi verifica l'esistenza della suddetta tabella.

    Public Overloads Shared Function GetSQLDatabases(ByVal server As String, ByVal userID As String, ByVal password As String) As String()
        'Build Connection String
        Dim connectionStringBuilder As New System.Data.SqlClient.SqlConnectionStringBuilder()

        connectionStringBuilder.DataSource = server
        connectionStringBuilder.InitialCatalog = "master"
        If String.IsNullOrEmpty(userID) Then
            connectionStringBuilder.IntegratedSecurity = True
        Else
            connectionStringBuilder.UserID = userID
            connectionStringBuilder.Password = password
        End If

        Dim databases As New System.Collections.Generic.List(Of String)
        Dim navisionDatabases As New System.Collections.Generic.List(Of String)

        Using connection As New System.Data.SqlClient.SqlConnection(connectionStringBuilder.ToString())
            connection.Open()

            'Selezione dei database a cui sia accesso
            Using command As System.Data.SqlClient.SqlCommand = connection.CreateCommand
                command.CommandText = "SELECT name FROM sysdatabases"
                command.CommandText &= " WHERE HAS_DBACCESS(name)=1"
                command.CommandText &= " AND name NOT IN ('master', 'model', 'msdb', 'tempdb')"
                command.CommandText &= " ORDER BY name"

                Dim reader As System.Data.SqlClient.SqlDataReader = Nothing
                reader = command.ExecuteReader()

                While reader.Read()
                    databases.Add(reader.Item(0).ToString())
                End While

                reader.Close()
            End Using

            'Verifica esistenza della tabella $ndo$dbproperty
            For Each database As String In databases
                connection.ChangeDatabase(database)
                Using tables As System.Data.DataTable = connection.GetSchema("tables", New String() {Nothing, Nothing, "$ndo$dbproperty"})
                    If tables.Rows.Count = 1 Then
                        navisionDatabases.Add(database)
                    End If
                End Using
            Next

            connection.Close()
        End Using

        Return navisionDatabases.ToArray()
    End Function

Print | posted on venerdì 10 febbraio 2006 18:49 | Filed Under [ Code & Snippet Navision Database ]

Feedback

Gravatar

# Navision e database | Emanuele Mattei

Navision e database | Emanuele Mattei
29/08/2013 20:46 | Pingback/TrackBack
Gravatar

# check cashing spring-valley

Thankful it had been a pleasant practical knowledge available for you. I'm sure that you simply undoubtedly do it again sometimes in addition to preferably when I am able to allow it to become to the next just one. Follow-up check cashing spring-valley Work Guide
03/09/2017 17:05 | Pervez
Gravatar

# re: Ottenere l'elenco dei database Navision su un'istanza SQL Server (Review)

Some really interesting details you have written. Helped me a lot, just what I was looking for.
18/01/2018 18:56 | Julie Andrew
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET