Come verificare se il database e le tabelle presenti in sql server in un vb .progetto in rete?

Qualcuno può dirmi come effettuare la verifica se il database e le tabelle in sql server esiste da un vb.net progetto? Quello che voglio fare è controllare se esiste già un database (preferibilmente in un ‘Se’ dichiarazione, a meno che qualcuno abbia un modo migliore di farlo) e se esiste, io faccio una cosa e, se non esiste, creare il database con le tabelle e colonne. Qualsiasi aiuto su questo argomento sarebbe molto apprezzato.

Edit:

L’applicazione dispone di una connessione a un server. Quando l’applicazione viene eseguita su un PC voglio verificare che esiste un database, se ne esiste uno, poi si va e fa quello che si suppone di fare, ma se un database NON esiste, allora si crea il database prima e poi va a fare ciò che si suppone di fare. Quindi, fondamentalmente, io voglio creare il database per la prima volta che viene eseguito su un PC e poi andare su di esso di business, quindi ogni volta che viene eseguito sul PC dopo che la voglio vedere che il database esiste e poi andare su di esso di business. Il motivo che mi vuoi come questo, perché questa applicazione sarà su più di un PC, voglio solo il database e le tabelle create una volta, (la prima volta che viene eseguito su un PC) e poi quando si gira su un PC diverso, si vede che il database esiste già e quindi eseguire l’applicazione utilizzando il database creato su un altro PC.

  • Presumo che la tua app deve già disporre di una connessione al server? Questa mi suona come una distribuzione invece di qualcosa che si dovrebbe incorporare in un’applicazione. È possibile controllare sys.database
  • Non credo che la connessione al server è il problema. Sto assumendo l’applicazione può creare un database & tabelle al volo, se non esiste già.
  • Questo mostra come controllare: kellyschronicles.wordpress.com/2009/02/16/…, mi piacerebbe postare come risposta, ma potrebbe essere solo una copia n incolla di lavoro.
  • stai collegamento ha funzionato alla grande, grazie per il vostro aiuto. Problema risolto.
  • nessun problema, io aggiungo come riferimento risposta il più presto possibile
InformationsquelleAutor Coder92 | 2014-08-06

 

4 Replies
  1. 4

    È possibile eseguire una query di SQL Server per verificare l’esistenza di oggetti.

    Per verificare se il database esistenza è possibile utilizzare questa query:

    SELECT * FROM master.dbo.sysdatabases WHERE name = 'YourDatabase'

    Per verificare la tabella esistenza è possibile utilizzare questa query su database di destinazione:

    SELECT * FROM sys.tables WHERE name = 'YourTable' AND type = 'U'

    Questo link seguente viene illustrato come verificare se il database è l’esistenza di SQL Server utilizzando VB.NET codice:

    Controllare se il Database SQL presente su un Server con vb.net

    Codice di riferimento dal link qui sopra:

    Public Shared Function CheckDatabaseExists(ByVal server As String, _
                                               ByVal database As String) As Boolean
        Dim connString As String = ("Data Source=" _
                    + (server + ";Initial Catalog=master;Integrated Security=True;"))
    
        Dim cmdText As String = _
           ("select * from master.dbo.sysdatabases where name=\’" + (database + "\’"))
    
        Dim bRet As Boolean = false
    
        Using sqlConnection As SqlConnection = New SqlConnection(connString)
            sqlConnection.Open
            Using sqlCmd As SqlCommand = New SqlCommand(cmdText, sqlConnection)
                Using reader As SqlDataReader = sqlCmd.ExecuteReader
                    bRet = reader.HasRows
                End Using
            End Using
        End Using
    
        Return bRet
    
    End Function

    Si potrebbe eseguire il controllo in un altro modo, così ha fatto in una singola chiamata utilizzando un EXISTS di controllo sia per il database una tabella:

    IF NOT EXISTS (SELECT * FROM master.dbo.sysdatabases WHERE name = 'YourDatabase')
    BEGIN
        -- Database creation SQL goes here and is only called if it doesn't exist
    END
    
    -- You know at this point the database exists, so check if table exists
    
    IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'YourTable' AND type = 'U')
    BEGIN
        -- Table creation SQL goes here and is only called if it doesn't exist
    END

    Chiamando il codice di cui sopra una volta con i parametri del database e il nome della tabella, si sa che esistono entrambi.

  2. 2

    Connettersi al database master e selezionare

    SELECT 1 FROM master..sysdatabases WHERE name = 'yourDB'

    e poi sul database

    SELECT 1 FROM INFORMATION_SCHEMA.TABLES  WHERE TABLE_NAME = 'yourTable'

    non so l’esatta sintassi di vb, ma dovete solo controllare il recordcount sul risultato

    • Questo sarà il lavoro, ma crea un problema sul lato del codice in cui è necessario verificare la presenza di NULL (Nothing) se il database o la tabella non esiste. Meglio utilizzare, SE presente(…..) SELEZIONARE 1 ELSE 0 SELEZIONARE quindi un ritorno è sempre guarateed.
    • Oh, l’ironia di @deterministicFail essere corretto il codice che non deterministicamente fallire…
    • nella mia ultima frase presumo per controllare il conteggio del resultset. Quindi, se sarebbe in vb e non in T-SQL
    • Non dimenticare di controllare lo schema di troppo. AND TABLE_SCHEMA = 'yourSchema'
    • Il punto è che si potrebbe ottenere il risultato di 1 o 0 senza ottenere un DataSet. Solo un ExecuteScalar è più performante. Ma, in questo contesto, non è davvero importante. Giusto per farvi sapere.
    • Se si SELECT 1 e il WHERE clausola è nulla, si otterrà un null che è necessario gestire. È possibile che si desidera utilizzare select count(1) per ottenere uno 0 o un 1
    • se si seleziona 1 e il cui natale è nulla, si otterrà nulla! provare in management studio Select 1 from table where 1=0. E il trucco suggerisco per verificare il numero di record che sono il recupero non il risultato stesso
    • hai detto la stessa cosa che ho fatto.
    • Andrews No, c’è una differenza tra le righe del resultset o una riga con il valore NULL
    • Si prega di provare con select count(1) in SQL Server, penso che sarete sorpresi. Select count(1) from table where 1=0 restituisce 0, non è null.

  3. 1

    Per le tabelle e altri oggetti all’interno di un database, di solito faccio in questo modo, ma è davvero una preferenza personale.

    IF OBJECT_ID('dbo.blah') IS NOT NULL
    BEGIN
    
    END

    Per VB.NET mi piacerebbe concludere in una stored procedure, e lo chiamano. Sono sicuro che ci sono anche modi per fare questo con Linq.

  4. 1

    È possibile utilizzare Questa query per controllare database

    SE DB_Id(‘YourDatabaseName’) NON È NULL

    INIZIARE

    PRINT 'DB EXISTS'

    FINE

    ALTRO

    INIZIARE

    PRINT 'DB  NOT EXISTS'

    FINE

Lascia un commento