Ciao, allora vediamo un po'
Per aggiungere all'installazione del tuo software anke l'sql server devi andare tra i prerequisiti dell'applicazione installazione e spuntare la casellina dell'sqlserver express
Praticamente dal "progetto di installazione" del tuo applicativo, vai sul menù
"Progetto"->"proprietà..."
nella finestra che ti appare clicca sul bottone prerequisiti
cerca nella lista "SQLSERVER 2005 Express edition" e selezionalo, dopodichè per comodità ti consiglio di cambiare la optionbox sottostante alla lista, selezionando
"scarica prerequisiti dallo stesso percorso dell'applicazione"
Spuntando questa casella sarà compito del compilatore preparare oltre che al setup.exe al file .msi e tutte le cartelle con i pacchetti dei prerequisiti selezionati
(in modo da non doverli scaricare tutte le volte da internet...)
Per quanto riguarda invece la creazione automatica del database, io personalmente vedo 2 modi
primo metodo (metodo che preferisco)
Crei lo script che fa la create database con tutte le tabelle/indici/permessi/etc etc, dopodichè nella routine di inizializzazione della tua applicazione in qualche modo verifichi che è il primo avvio del programma e quindi dovrai eseguire lo script della create database.
secondo metodo
Aggiungi il file .mdf del database fatto e finito al progetto di installazione della tua applicazione, in modo che si trascini dietro il database già pronto per essere "attaccato" all'istanza di SQL che andrai ad installare, dopodichè nella routine di inizializzazione della tua applicazione in qualche modo verifichi che è il primo avvio del programma e quindi dovrai eseguire l'attach del database .mdf che ti sei portato dietro.
Esempio di attach
Dim o_SQLSERVER as New SQLDMO.SQLServer
o_SQLSERVER.loginsecure = true
o_SQLSERVER.Connect "(local)" '//Forse funziona anche se metti ""
o_SQLSERVER.AttachDBWithSingleFile("NOMEDATABASE","PATHFILE.MDF")
'//Così facendo hai attaccato il tuo database all'istanza locale
L'esempio del primo caso è un po' più lungo xò se ti interessa te lo posso postare...
Spero di essere stato comprensibile
(p.s. Preferisco il primo metodo perchè così sono sicuro che il database è pulito, con gli indici rigenerati da zero etc etc, è un pochino più lungo e complesso...)
(p.p.s. Un possibile modo per verificare il primo avvio di una applicazione è controllare se esistono dei valori in un punto particolare del registro di sistema)