Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Programma che installa il suo database
domenica 12 novembre 2006 - 20.44
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Shadow
Profilo
| Junior Member
194
messaggi | Data Invio:
dom 12 nov 2006 - 20:44
Dopo una breve pausa per motivi di studio,
da alcuni giorni eccomi tornato! Vi pongo un importante quesito per me ancora aperto, al quale non sono riuscito a trovare soluzione:
Ho una semplicissima applicazione rubrica telefonica in C# 2005 con database Sql Server 2005 Express. Ho creato correttamente uno script sql che se eseguito genera l'intero database; ora devo creare il progetto di installazione per l'intera applicazione (intera.. Capirai! E' piccolissima..) e vorrei fare in modo di includere ovviamente lo script di creazione database, per fare in modo che venga eseguito all'installazione del programma e che crei, se non esiste, il database.
Qual'è il modo giusto di procedere? Grazie!
Shadow
stellaga
Profilo
| Newbie
33
messaggi | Data Invio:
mar 14 nov 2006 - 08:04
Ciao stò lavorando a qualcosa del genere. Stò procedendo creando, sempre in .Net, un programma che, tramite lo scipt sql, generi il database. Se funziona tutto bene ti faccio sapere.
Ciao
Gaetano Stella
Shadow
Profilo
| Junior Member
194
messaggi | Data Invio:
mar 14 nov 2006 - 09:44
Gaetano sei stato molto gentile, tienimi informato! E' una vita che non vengo fuori da questo problema, mi sembra impossibile! Fare semplicemente in modo che all'installazione della propria win app C# 2005 venga eseguito uno script di creazione database... E' così difficile o sono io che ho scarsa esperienza? :-( Grazie di nuovo, aspetto notizie.
Shadow
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 14 nov 2006 - 10:40
>E' una vita
>che non vengo fuori da questo problema, mi sembra impossibile!
>Fare semplicemente in modo che all'installazione della propria
>win app C# 2005 venga eseguito uno script di creazione database...
Shadow,
Ne abbiamo già discusso a lungo nel thread che hai aperto a luglio...
http://www.dotnethell.it/forum/messages.aspx?ThreadID=9412
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
stellaga
Profilo
| Newbie
33
messaggi | Data Invio:
mar 14 nov 2006 - 14:48
Shadow effettivamente come dice Lorenzo avevi avuto dei suggerimenti validi, comunque ti espongo quello che stò facendo:
1) Creazione file script sql con le istruzione per la generazione del database, lo puoi fare con SQL Server Management studio;
2) esportazione dei dati ( se ti interessa esportare anche i dati contenuti nelle tabelle) tramite l'utility da prompt dei comandi bcp,
la sintassi è bcp <nome tabella> out <nome file> -c -S .\<istanza sql server> -T
( esempio bcp agimm.dbo.citta out citta.dat -c -S .\sqlexpress -T)
3)importa come risorsa interna il file script per la creazione del db e utilizza il codice sottostante (consideralo come una traccia l'ho buttato giù senza starci a perdere molto tempo e rubacchiando del codice in giro, fonte MSDN "Embedding SQL Sever Express into Custom Application" che offre diversi metodi tra cui questo):
private string[] ParseStr(string str)
{
string[] commands;
commands = Regex.Split(str, "GO\r\n", RegexOptions.IgnoreCase);
return commands;
}
private void BuildDB(string str)
{
string strsql=@"Data Source=.\SQLEXPRESS;Integrated Security=True";
string[] strCommand;
strCommand = ParseStr(str);
SqlCommand cmd= new SqlCommand();
using (SqlConnection conn= new SqlConnection(strsql))
{
try
{
conn.Open();
cmd.Connection = conn;
foreach (string strcmd in strCommand)
{
if (strcmd.Length > 0)
{
cmd.CommandText = strcmd;
cmd.ExecuteNonQuery();
}
}
conn.Close();
}
catch (Exception err)
{
MessageBox.Show(err.Message);
};
}
}
private void insertDatiBulk()
{
string path=Application.StartupPath.ToString() + @"\resources\";
string str =@"bulk insert agimm.dbo.";
string str1=" from '";
string strsql=@"Data Source=.\SQLEXPRESS;Integrated Security=True";
string[] strCommand= new string[2];
strCommand[0]=@"citta";
strCommand[1]=@"catcomm";
SqlCommand cmd= new SqlCommand();
using (SqlConnection conn= new SqlConnection(strsql))
{
try
{
conn.Open();
cmd.Connection = conn;
foreach (string strcmd in strCommand)
{
cmd.CommandText =str + strcmd + str1 + path + strcmd + ".dat'";
cmd.ExecuteNonQuery();
}
conn.Close();
}
catch (Exception err)
{
MessageBox.Show(err.Message);
};
}
}
Questo codice lo puoi avviare tramite un processo che si attiva con l'installazione oppure, come ho fatto io, creando un applicativo a parte per la gestione del db
4)La procedura insertDatiBulk(), utilizzata per popolare il database, utilizza il comando transact-sql "insert bulk" la cui sintassi è insert bulk <database>.<owner>.<tabella> from <file>
Spero che quanto ti ho scritto ti sia di aiuto
Ciao
Gaetano Stella
Shadow
Profilo
| Junior Member
194
messaggi | Data Invio:
lun 4 dic 2006 - 22:18
Caro Stellaga, caro LBenaglia,
grazie innanzitutto per il vostro grande aiuto. Quando 'sparisco' per un pò non è per diserzione dal mio Visual Studio (ci mancherebbe!!) ma perché gli impegni universitari mi costringono a giorni (e notti) nelle quali a volte mi scordo anche di pranzare. Eccomi tornato, dopo una prova inter corso davvero impegnativa.
Riprendiamo il discorso da dove lo avevamo lasciato. Benaglia, è vero, mi hai dato lunghissime e chiare risposte in un'altra discussione. Credevo di aver risolto tutto; la soluzione che ho postato nell'altra discussione riguardava l'utilizzo di Cyber Installer, col quale CREDEVO davvero di aver risolto tutto. In realtà testando il tutto su una nuova macchina mi sono accorto di non aver risolto nulla, e non (preciso!) per mancanze di Cyber Installer ma perché devo aver sbagliato qualcosa io in quanto il programma si installava benissimo ma nessun database veniva creato. Quindi ho ripreso i tuoi consigli là dove li avevo lasciati, e leggendo a fondo l'altra discussione mi sono soffermato su un tuo passaggio che è quello che sto seguendo ora:
_________________
LBenaglia wrote:
Guarda, non conosco le ultime diavolerie incluse in VS, ma io farei una cosa banalissima.
Ogni istanza di SQL Server 2005 include l'utility command line sqlcmd.exe che ti permette di interfacciarti ad essa. Come prima cosa preparerei lo script del db contenente gli oggetti, le login, gli user accounts, le permission, eventualmente dei dati tramite comandi INSERT, lo includerei nel setup ed aggiungerei una custom action al programma del setup che esegue tale script via sqlcmd.exe.
3 click ed il gioco è fatto
_________________
Premesso che, come da miei ultimi messaggi, sono riuscito (solo grazie ai tuoi consigli) a creare un perfetto file di creazione db contenente TUTTI gli oggetti, premesso che non ho problemi ad includerlo tra i file che il progetto di installazione dovrà creare, quindi anche l'inclusione nel setup è cosa fatta, tutto ciò premesso, come si aggiunge al programma di setup la custom action di cui parli? Come fare in modo che si esegua al primo avvio? (supponiamo il nome dello script NomeScript.sql). Gaetano, ho cercato di studiare un pò anche il tuo codice. Ti chiederei troppo se ti chiedessi di integrarlo con qualche riga di commento? Vedo alcune istruzioni mai usate prima.
Grazie infinitamente per il vostro insostituibile e soprattutto paziente aiuto, dite un pò mentre ero sommerso dai libri avete sentito la mia mancanza?
Shadow
Shadow
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !