Avatar billede cdm_kiwie Nybegynder
02. maj 2003 - 13:04 Der er 9 kommentarer og
1 løsning

kørsel af en sql file

Hejsa

Jeg har en idé til en løsning til noget jeg roder med. Jeg har behov for at en file f.eks. update.sql altså en txt file som indeholder en række sql kommandoer. Hvordan køre jeg nemmest denne i asp.net. Btw jeg bruger VB.
Avatar billede thomas_regin Nybegynder
04. maj 2003 - 01:50 #1
Hejsa!

Jeg kan desværre ikke forklare dig hvordan du gør i VB, men i C#. Da de 2 sprog ligner rimeligt meget hinanden, kan du sikkert godt gætte dig til resten!

Denne metode, som jeg paster ind herunder kan både scripte en Stored Procedure eller et reelt .sql script:

private void executeScript(string scriptName, int what)
        {
            StreamReader sr;
            if (what == 0)
            {
                sr = new StreamReader(Directory.GetCurrentDirectory() + @"\SQL\" + scriptName);
            }
            else
            {
                sr = new StreamReader(Directory.GetCurrentDirectory() + @"\SQL\Procedures\" + scriptName);
            }
           
            string script = sr.ReadToEnd().Replace("GO","");
            SqlCommand cm = new SqlCommand(script,sc);
            cm.ExecuteNonQuery();
            sr.Close();
        }

Det eneste du skal huske, er at fjerne alle "GO" fra dine .sql scripts før du afvikler dem, da den indbyggede parser ikke kan finde ud af hvad den skal bruge dem til!

Det er ret nemt. Som du kan se, skal du blot læse dine scripts ind i en stream og derefter afvikle præcis som du gør med alle andre SQL-statements!

God fornøjelse,

Thomas Regin.
Avatar billede burningice Nybegynder
04. maj 2003 - 09:43 #2
din kode kræver så at der kun er en statement i hver fil ? Jeg ved ikke om man kan fra asp.net, men man kunne måske bare execute filen?
Avatar billede cdm_kiwie Nybegynder
04. maj 2003 - 10:58 #3
IbuySpy anvender følgende:

<?xml version="1.0" encoding="utf-8" ?>
<Setup>
    <Configuration VRootName="PortalVB" SqlVersion="8" DbName="Portal" SqlScript="PortalDB.sql"></Configuration>
</Setup>


Ved ikke om der skal mere til eller hvordan, men jeg kan ikke lige få et eget forsør til at virke.
Avatar billede thomas_regin Nybegynder
04. maj 2003 - 11:07 #4
Cyberfessor,

Det passer ikke!.. Jeg afvikler store SQL-scripts på denne måde, som generer hele databaser med relationer og så videre!

Mvh,

Thomas Regin.
Avatar billede burningice Nybegynder
04. maj 2003 - 16:39 #5
thomas_regin>> en fil med følgende indhold:

Create Table employees
(
lastname Varchar(50),
firstname Varchar(50),
department Varchar(50)
)
go
Insert employees Values ('Bauer','Shane','Engineering')
Insert employees Values ('Tillery','Derek','Engineering')
Insert employees Values ('Pasterfield','Ryan','Engineering')
Insert employees Values ('Trautner','Paul','Engineering')

det kan godt afvikles i en enkelt ExecuteNonQuery ?
Avatar billede thomas_regin Nybegynder
04. maj 2003 - 16:59 #6
Jeg har faktisk aldrig prøvet at "Insert'e" data, når jeg executer mine SQL-scripts, men flg. eksekverer f.eks uden problemer efter at have fjernet "GO":

CREATE TABLE [dbo].[BANNERS] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [GUID] [uniqueidentifier] NOT NULL ,
    [BANNER_NAME] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [BANNER_IMAGE] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [BANNER_POS] [int] NULL ,
    [BANNER_HREF] [varchar] (200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [ACTIVATED] [int] NULL ,
    [HITS] [int] NULL ,
    [DATE_CREATED] [datetime] NULL ,
    [DATE_FROM] [datetime] NULL ,
    [DATE_TO] [datetime] NULL ,
    [EXPS] [int] NULL ,
    [Costumer_ID] [int] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[BANNER_CLICKS] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [GUID] [uniqueidentifier] NOT NULL ,
    [DATE_CLICKED] [datetime] NULL ,
    [IP_ADDRESS] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [EXP_PAGE] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[BANNER_POSITIONS] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [GUID] [uniqueidentifier] NULL ,
    [ART_ID] [int] NULL ,
    [MENU_ID] [int] NULL ,
    [ZONE] [int] NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[BANNERS] WITH NOCHECK ADD
    CONSTRAINT [PK_BANNERS] PRIMARY KEY  CLUSTERED
    (
        [GUID]
    )  ON [PRIMARY]
GO

ALTER TABLE [dbo].[BANNER_CLICKS] WITH NOCHECK ADD
    CONSTRAINT [PK_BANNER_CLICKS] PRIMARY KEY  CLUSTERED
    (
        [ID]
    )  ON [PRIMARY]
GO

ALTER TABLE [dbo].[BANNER_POSITIONS] WITH NOCHECK ADD
    CONSTRAINT [PK_BANNER_POSITIONS] PRIMARY KEY  CLUSTERED
    (
        [ID]
    )  ON [PRIMARY]
GO

ALTER TABLE [dbo].[BANNERS] ADD
    CONSTRAINT [DF_BANNERS_HITS] DEFAULT (0) FOR [HITS],
    CONSTRAINT [DF_BANNERS_DATE_CREATED] DEFAULT (getdate()) FOR [DATE_CREATED],
    CONSTRAINT [DF_BANNERS_EXPS] DEFAULT (0) FOR [EXPS]
GO

ALTER TABLE [dbo].[BANNER_CLICKS] ADD
    CONSTRAINT [DF_BANNER_CLICKS_DATE_CLICKED] DEFAULT (getdate()) FOR [DATE_CLICKED]
GO

ALTER TABLE [dbo].[BANNER_CLICKS] ADD
    CONSTRAINT [FK_BANNER_CLICKS_BANNERS] FOREIGN KEY
    (
        [GUID]
    ) REFERENCES [dbo].[BANNERS] (
        [GUID]
    )
GO

ALTER TABLE [dbo].[BANNER_POSITIONS] ADD
    CONSTRAINT [FK_BANNER_POSITIONS_BANNERS] FOREIGN KEY
    (
        [GUID]
    ) REFERENCES [dbo].[BANNERS] (
        [GUID]
    )
GO

Mvh,

Thomas Regin.
Avatar billede burningice Nybegynder
04. maj 2003 - 22:50 #7
fair nok... jeg troede bare at hver enkelt statements skulle afvikles hver for sig :) men hvad, man lærer noget nyt hver dag ;)
Avatar billede cdm_kiwie Nybegynder
04. maj 2003 - 23:39 #8
jeg kigger på det  :)
Avatar billede thomas_regin Nybegynder
04. maj 2003 - 23:39 #9
Det jo det! ;)
Avatar billede thomas_regin Nybegynder
05. maj 2003 - 00:01 #10
Ovenstående svar var til Cyberfessor! ;)

Cdm_kiwie,
Tak for pointene! Håber, at det virker for dig!!

/thomas.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester