[C# 2.0] Runtime SQL Server DB maken

Pagina: 1
Acties:
  • 142 views sinds 30-01-2008
  • Reageer

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 11:02
Ik wil met een setup project in Visual Studio 2005 een SQL Server Express 2005 database aanmaken.

SQLServer Express wordt door de klant zelf geinstalleerd.

Ik wil met de setup de database instance aanmaken. Het vullen van de DB gebeurt met NHibernate.

Wat is de beste manier (T-SQL met custom action bijv?) ?

  • giMoz
  • Registratie: Augustus 2002
  • Laatst online: 27-11 14:05

giMoz

iets met meester...

is er geen "sp_create_database()" procedure o.i.d.?

Of niet natuurlijk...


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:24

gorgi_19

Kruimeltjes zijn weer op :9

giMoz schreef op woensdag 07 maart 2007 @ 10:49:
is er geen "sp_create_database()" procedure o.i.d.?
Je kan toch een SQL Script genereren en die laten uitvoeren? :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Ahrnuld
  • Registratie: April 2002
  • Laatst online: 12:01
DrDelete schreef op woensdag 07 maart 2007 @ 10:11:
Ik wil met een setup project in Visual Studio 2005 een SQL Server Express 2005 database aanmaken.

SQLServer Express wordt door de klant zelf geinstalleerd.

Ik wil met de setup de database instance aanmaken. Het vullen van de DB gebeurt met NHibernate.

Wat is de beste manier (T-SQL met custom action bijv?) ?
Wil je een C# oplossing of een oplossing voor een Visual Studio Setup Project? De titel van je bericht komt niet echt overeen met de inhoud ben ik bang :o

Niets...


  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 11:02
giMoz schreef op woensdag 07 maart 2007 @ 10:49:
is er geen "sp_create_database()" procedure o.i.d.?
ik gebruik NHibernate en wil eigenlijk alleen op de localhost\sqlexpress default instance een database maken met een vaste naam.

Dit is de NHibernate connection string:

code:
1
2
3
<item key="hibernate.connection.connection_string">
            Data Source=localhost\sqlexpress;Initial Catalog=MyDB;Integrated Security=True;Pooling=False
          </item>


NHibernate maakt de inhoud van de database. Wat ik moet doen is er voor zorgen dat op de default sqlexpress instance op localhost een database 'MyDB' wordt gemaakt. Dit alles moet in een setup project aangemaakt worden.

[ Voor 3% gewijzigd door DrDelete op 07-03-2007 11:12 ]


  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 11:02
Ik heb het volgende gedaan:

Een setup project toegevoegd. Een class library project toegevoegd met daarin een installerclass. In de setup een custom action met in de Install de verwijzing naar de custom install class van de class library.

In de custom installer class heb ik in de override van install een SqlCommand gezet met daarin een simpele DB script:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public override void Install(System.Collections.IDictionary stateSaver)
{
  base.Install(stateSaver);

  string connectionString = @"Data Source=localhost\sqlexpress;
           Initial Catalog=master;Integrated Security=True;Pooling=True";

  using (SqlConnection sqlConnection = new SqlConnection(connectionString))
  {
     sqlConnection.Open();
                
     using(SqlCommand sqlCommand = new SqlCommand())
     {
        sqlCommand.Connection = sqlConnection;
        sqlCommand.CommandText =  @"
             use master
             go
             if exists(select * from sysdatabases where name='mydb') 
             begin
                drop database mydb;
                go
             end
             
            create database mydb;
            go";
                    
         sqlCommand.ExecuteNonQuery();
   }
}

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

SQL:
1
2
3
4
5
             if exists(select * from sysdatabases where name='mydb') 
             begin
                drop database mydb;
                go
             end

en toen was (hoe onwaarschijnlijk ook) die naam toevallig al in gebruik (ouch!)

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 11:02
TheRookie schreef op woensdag 07 maart 2007 @ 15:27:
SQL:
1
2
3
4
5
             if exists(select * from sysdatabases where name='mydb') 
             begin
                drop database mydb;
                go
             end

en toen was (hoe onwaarschijnlijk ook) die naam toevallig al in gebruik (ouch!)
wees niet bang: deze applicatie wordt altijd op een schone laptop gezet waar geen andere SQL Server apps op draaien.

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

:) Dat hoopte ik al, maar je weet maar nooit. Een re-install heeft neem ik aan een andere installer class

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 11:02
TheRookie schreef op woensdag 07 maart 2007 @ 16:12:
:) Dat hoopte ik al, maar je weet maar nooit. Een re-install heeft neem ik aan een andere installer class
Hoezo ? Een reinstall houdt dezelfde installerclass. Ik heb een install en uninstall geimplementeerd op de installerclass, met een createdatabase en een dropdatabase op de respectievelijke method overrides.

Verder ben ik afgestapt van T-SQL aangezien dit te complex werd voor de requirement. Ik gebruik nu SqlCommand voor het aanmaken en vervallen van de database.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11:17

Janoz

Moderator Devschuur®

!litemod

Het lijkt me dat je bij een reinstall wel de gegevens ind e database wilt bewaren, maar het kan natuurlijk zijn dat ik compleet irreele en onlogische eisen stel ;).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

My point exactly :D
Pagina: 1