Urgente: File di creazione database!

lunedì 23 ottobre 2006 - 14.21

Shadow Profilo | Junior Member

Buonasera a tutti,
sto affrontando 'in pratica' un problema al quale tempo fa avevo accennato in alcuni post ed ai quali avete risposto con la massima disponibilità: semplicemente, il modo più corretto perché il mio programma (semplice rubrica telefonica C# 2005 + Sql Server 2005 Express) si installi correttamente. Superati tutti gli scogli relativi all'installazione del framework e del motore database (grazie alle vostre indicazioni, e grazie alla lettura delle chiavi di registro), siamo al passo finale ovvero la creazione del db vero e proprio. Tutto quello che dirò di seguito potrebbe essere sbagliato, quindi lo sottopongo alla vostra attenzione.

Il modo migliore, stando alle vostre indicazioni, è creare dal Sql Server uno script di creazione database. Poi, aggiungere alla soluzione un nuovo progetto di database ed includere lo script appena creato nella cartella 'Create Scripts'; quindi inglobare quel progetto nella soluzione finale (come suggerito dalla guida MSDN, che ho spulciato in lungo e in largo). E' questo il modo più efficiente? Se siete d'accordo, riguardo al primo punto ho trovato alcune difficoltà.

Volendo creare un database esattamente come quello che si trova sul mio PC, se da Sql Server seleziono tasto destro e crea script database -> genera codice per istruzione create viene creato un file sql che non crea nulla; se ci provo con Attività -> genera script viene creato uno script che, se cliccato due volte, genera il database ma non le tabelle.

Cosa sbaglio? potete darmi la procedura corretta per creare un file script che alla sua esecuzione riproduca esattamente il database dal quale è stato creato, allo scopo di inglobarlo in un progetto da distribuire? Grazie a tutti, siete insostituibili. Com'è complicato eseguire operazioni così semplici e che dovrebbero essere parte integrante di qualsiasi applicazione distribuita, quasi quasi torno ad Access! (scherzo ovviamente, con quello che mi è costato il Visual Studio 2005 Pro)!!!


Shadow

lbenaglia Profilo | Guru

>E' questo il modo più efficiente?
Si.

>Volendo creare un database esattamente come quello che si trova
>sul mio PC, se da Sql Server seleziono tasto destro e crea script
>database -> genera codice per istruzione create viene creato
>un file sql che non crea nulla; se ci provo con Attività ->
>genera script viene creato uno script che, se cliccato due volte,
>genera il database ma non le tabelle.
Mah... probabilmente lo script non contiene la definizione delle tabelle, questo lo sai tu, noi no di certo

>Cosa sbaglio? potete darmi la procedura corretta per creare un
>file script che alla sua esecuzione riproduca esattamente il
>database dal quale è stato creato, allo scopo di inglobarlo in
>un progetto da distribuire?
Per generare lo script del database, login, user accounts e oggetti devi utilizzare lo Script Wizard richiamabile selezionando in SSMS il database > tasto DX > Tasks > Generate Scripts...
Presta la massima attenzione a tutte le opzioni proposte dal wizard!

>Grazie a tutti, siete insostituibili.
Eh, lo sappiamo

>Com'è complicato eseguire operazioni così semplici e che dovrebbero
>essere parte integrante di qualsiasi applicazione distribuita,
>quasi quasi torno ad Access! (scherzo ovviamente, con quello
>che mi è costato il Visual Studio 2005 Pro)!!!
Beh... basta leggere l'help (i Books Online...)

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Shadow Profilo | Junior Member


1024x768 120Kb


Dunque faccio esattamente come dici tu, tasto destro -> attività -> crea script -> seleziono le proprietà la cui immagine ti allego -> andando avanti faccio bene attenzione a selezionare TUTTI gli oggetti che vedo -> viene quindi creato lo script che ti scrivo sotto. Ma poi quando lo eseguo non accade nulla! Ho sbagliato modalità di creazione script? Sigh!


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TblClientiAnagrafica]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[TblClientiAnagrafica](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Cognome] [nchar](30) NULL,
[Nome] [nchar](30) NULL,
[Indirizzo] [nchar](40) NULL,
[Comune] [nchar](30) NULL,
[Provincia] [nchar](5) NULL,
[Cap] [nchar](5) NULL,
[NascitaData] [datetime] NULL,
[NascitaComune] [nchar](30) NULL,
[NascitaProvincia] [nchar](5) NULL,
[CodiceFiscale] [nchar](20) NULL,
CONSTRAINT [PK_TblClientiAnagrafica] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
Shadow

lbenaglia Profilo | Guru

>Dunque faccio esattamente come dici tu, tasto destro -> attività
>-> crea script -> seleziono le proprietà la cui immagine
>ti allego -> andando avanti faccio bene attenzione a selezionare
>TUTTI gli oggetti che vedo -> viene quindi creato lo script
>che ti scrivo sotto.
Scusa, ma il tuo db è costituito solo dalla tabella TblClientiAnagrafica?

>Ma poi quando lo eseguo non accade nulla!
Beh, su, il comando CREATE TABLE serve appunto per creare una tabella
Il problema è che non vedo il comando CREATE DATABASE per creare il db e USE db per selezionare il database appena creato. Secondo me se guardi bene la tabella sarà stata creata nel database specificato nella connection string (probabilmente master).

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Shadow Profilo | Junior Member

1) Si, è costituito solo da quella tabella (si trattava di una prova che avevo appunto fatto a tale scopo).

2) Già hai ragione ha creato quella tabella nel database master. Il punto è che io sto cercando una procedura guidata che crei tutto senza che sia io a dover scrivere a mano le singole istruzioni. Esiste qualcosa che faccia al caso mio? Altrimenti dovrò scrivermi riga per riga il codice necessario...

GRAZIE!
Shadow

lbenaglia Profilo | Guru

>2) Già hai ragione ha creato quella tabella nel database master.
>Il punto è che io sto cercando una procedura guidata che crei
>tutto senza che sia io a dover scrivere a mano le singole istruzioni.
>Esiste qualcosa che faccia al caso mio? Altrimenti dovrò scrivermi
>riga per riga il codice necessario...
Ma che riga per riga?!
Fatti generare lo script dal wizard e dove serve aggiungi una USE database e finita lì.
Lo script lo generi una volta sola, quindi le piccole personalizzazioni che dovrai apportare saranno una tantum.

>GRAZIE!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Shadow Profilo | Junior Member

Tutto funziona alla perfezione!!! Ho generato lo script con due accorgimenti: flag su 'tutti gli oggetti' e true su 'crea database'.

Ma al di là di questi dettagli tecnici non ho parole per ringraziarti. Sarà l'ennesima volta in cui riesci con pazienza a risolvere problemi come fossero cose semplicissime. Il .NET mi affascina ed ho comprato molti libri sull'argomento (ultimo in ordine di tempo C# 2005 guida per lo sviluppatore) ma certe cose in teoria sui libri sono spiegate benissimo, in pratica no! Mi rendo conto che certe cose si capiscono solo 'smanettando', io voglio sviluppare software non devo superare un esame! Beh, il vostro forum è una colonna. E non lo dico con retorica, chissà quante volte mi sarei arenato se non ci fosse stato.

Questo quesito può ritenersi definitivamente risolto, ora posterò in un altro messaggio il seguente (relativo all'utilizzo di tale file).
Shadow
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 !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5