Avatar billede offerlam Nybegynder
04. december 2006 - 14:25 Der er 28 kommentarer og
1 løsning

Create kommando

Hejsa eksperter....

jeg vil lave en knap på en ASP.net form hvor, når jeg klikker på den, laver en database i min MS SQL server. altså en knap der sender kommandoen "CREATE DATABASE test" til min MS SQL server.

hvordan vil den kode se ud.

jeg har været inde og kigge på noget datareader og dataset men jeg synes ikke rigtig noget af det giver mening. kan i hjælpe...jeg skal bare bruge koden (hvis den ikke er for komplex) så regner jeg med at jeg kan læse mig ud af det.
Avatar billede dr_chaos Nybegynder
04. december 2006 - 14:30 #1
Jeg vil foreslå noget i denne stil:
public void getFlowID(string dbname)
        {
            using (SqlConnection conn = new SqlConnection("dinconnectionstring"))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    try
                    {
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Connection = conn;
                        cmd.CommandText = "SP_DataBase_Create";

                        cmd.Parameters.Add("@DbName", SqlDbType.VarChar, 1000).Value = dbname;
                        cmd.Connection.Open();
                     
                        cmd.ExecuteNonQuery();

                    }
                    catch (Exception e)
                    {
                     
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }

        }
Avatar billede dr_chaos Nybegynder
04. december 2006 - 14:32 #2
På database niveau laver du så en stored procedure kaldet:
SP_DataBase_Create
Den modtager en varchar variablen kaldet @dbname.
Her kan du så kalde
declare @sql varchar(8000)
SET @sql='Create DataBase'+ @dbname

exec(@sql)
Avatar billede dr_chaos Nybegynder
04. december 2006 - 14:35 #3
Det er muligt at du kan kalde
Create DataBase @dbname
direkte men jeg tvivler lidt.
Du kan også lave så den ikke modtager noget dbname, så skal du bare fjerner
"cmd.Parameters.Add("@DbName", SqlDbType.VarChar, 1000).Value = dbname;"

Så skal din SP se ud på denne måde:
Create DataBase 'Test'
Avatar billede dr_chaos Nybegynder
04. december 2006 - 14:35 #4
I din connectionstring skal du formodentlig koble op til master databasen.
Er dog ikke helt sikker.
Avatar billede offerlam Nybegynder
04. december 2006 - 14:38 #5
hmm skal det være så besværligt?

jeg lavede et projekt i asp for et stykke tid siden hvor jeg skulle kunne lave en database fra grunden af ud fra en hjemme side.

I korte træk var det eneste jeg skulle der, at ligge CREATE DATABASE test ned i en variable og skyde den afsted til MS SQL serveren så klarede SQL serveren resten....kan man ikke det samme her?
Avatar billede dr_chaos Nybegynder
04. december 2006 - 14:41 #6
Det er i princippet det du gør.
Her kalder du bare en stored procedure i stedet for en commandtext.
Avatar billede offerlam Nybegynder
04. december 2006 - 14:44 #7
ok... hvad så hvis jeg vil bruge create kommandoen til at lave tabeller, skal jeg så ikke bare bruge dataTable?
Avatar billede offerlam Nybegynder
04. december 2006 - 14:48 #8
Jeg synes du har givet et godt svar...noget jeg kan arbejde med ihvertfald...du får point
Avatar billede dr_chaos Nybegynder
04. december 2006 - 15:07 #9
ok så smider jeg et svar.
I den stored procedure du laver kan du indsætte alt det sql du vil.
Derfor kan du også bruge den til at opsætte tabeller og indsætte værdier o.lign.

i C# bruger man normalt sqlcommand til at udfører commandoer på databasen.
Avatar billede arne_v Ekspert
04. december 2006 - 15:08 #10
jeg kan ikke se hvorfor ikke man skulle kunne kalde CREATE DATABASE direkte

PS: SQLServer DBA'erne faar en lidt usund farve i hovedet hvis man kalder sine
    egne stored procedures for SP_* ligesom systemets egne. USP_* maaske.
Avatar billede offerlam Nybegynder
04. december 2006 - 15:09 #11
hvordan ville du så gøre det arne_v for jeg har prøvet på alle leder og kanter og jeg kan bare ikke få den til det....
Avatar billede dr_chaos Nybegynder
04. december 2006 - 15:10 #12
arne_v mit foreslag er lavet udfra at man måske også vil lave tabeller og andet samtidig.
Det bliver en noget grim commandtext hvis du skal have alt det sql i en string.
Men det kan lade sig gøre.

PS. Er enig i SP_ betragtningen :)
Avatar billede offerlam Nybegynder
04. december 2006 - 15:12 #13
men hvordan gør man!!!!! :)
Avatar billede dr_chaos Nybegynder
04. december 2006 - 15:15 #14
sådan:
using (SqlConnection conn = new SqlConnection("dinconnectionstring"))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    try
                    {
                        cmd.CommandType = System.Data.CommandType.Text
;
                        cmd.Connection = conn;
                        cmd.CommandText = "Create database 'test'";

                        cmd.Parameters.Add("@DbName", SqlDbType.VarChar, 1000).Value = dbname;
                        cmd.Connection.Open();
                   
                        cmd.ExecuteNonQuery();

                    }
                    catch (Exception e)
                    {
                   
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }
Avatar billede offerlam Nybegynder
04. december 2006 - 15:17 #15
cmd.Parameters.Add("@DbName", SqlDbType.VarChar, 1000).Value = dbname;

forstår jeg som værende atributterne til databaset navnet...lidt ligesom når du laver tabeller, men er det overhoved nødvendigt? du kan jo sagtens lave en database med create statement uden at skulle give den yderligere information hvis du gør det i qurrey analyser?
Avatar billede dr_chaos Nybegynder
04. december 2006 - 15:27 #16
nej det skriver jeg også i en senere post.
Avatar billede offerlam Nybegynder
04. december 2006 - 20:01 #17
ah ok...dumme mig...

jeg skulle ha givet dig point....men jeg er ikke sikker på de gik igennem so to speak
Avatar billede dr_chaos Nybegynder
04. december 2006 - 20:05 #18
Du skal markere mit navn i boksen og trykke accepter.
Der er ingen som er dumme her :)
Har du fået tilfredsstillende svar på dine spørgsmål ?
Avatar billede offerlam Nybegynder
04. december 2006 - 20:07 #19
ah nu er den væk...skal man nu også markere navnet...hmm burde vel være nok det stod der...nå ligemeget.

jeg tror jeg har fået nok ammunition til at kunne lave resten selv, noget skal man jo også lærer på egen hånd. Mange tak for hjælpen.

jeg kan vel altid skrive her igen hvis jeg stadig ikke fatter det. Lige nu tager jeg mig lige en lille pause. Har jo også et liv at se til :P
Avatar billede dr_chaos Nybegynder
04. december 2006 - 20:14 #20
Hehe det har jeg også.
Det inkluderer en datter som ikke mener hun skal sove :/
Avatar billede offerlam Nybegynder
04. december 2006 - 20:17 #21
hehe den eveige krig der er opdragelse...

ja er jo ikke selv helt noget til det stadie endnu
Avatar billede offerlam Nybegynder
05. december 2006 - 13:25 #22
med al respekt for dr chaos fremregende hjælp bringer jeg lige et udrag fra koden han fremlagde med nogle få rettelser til dem som har haft ligende problemer:

cmd.CommandType = System.Data.CommandType.Text - skal rettes til ->

cmd.CommandType = System.Data.CommandType.Text;

og

cmd.CommandText = "Create database 'test'"; - skal rettes til ->

cmd.CommandText = "Create database test"; - så skulle den også være der :) det var dne for mig ihvertfald.


dr chaos hvis du læser det her kan du så ikke lige forklare mig hvorfor denne linje er med: cmd.Connection = conn;

grunden til jeg spørg er fordi du ikke bruger conn når du åbner forbindelsen til serveren men derimod skriver cmd.Connection.Open(); hvorfor hedder den ikke bare conn.open? specielt når du bruger conn.close til sidst?

jeg har prøvet med conn.open og det virker ikke så det er jo rigtigt jeg forstår bare ikke hvorfor conn.open ikke virker?
Avatar billede dr_chaos Nybegynder
05. december 2006 - 14:45 #23
Det er fordi jeg laver en instans af en sqlconnection med:
using (SqlConnection conn = new SqlConnection("dinconnectionstring"))
            {
Man kunne også have brugt cmd.Connection= new SqlConnection("dinconnectionstring"));
Ved at bruge using metoden sikre jeg mig at der er ryddet op efter mig.

conn.close() er en fejl skal være
cmd.Connection.Close();

Jeg fostår ikke helt hvad du mener med:
cmd.CommandType = System.Data.CommandType.Text - skal rettes til ->

cmd.CommandType = System.Data.CommandType.Text;

Den anden linie var bare pseudokode :)
Avatar billede offerlam Nybegynder
06. december 2006 - 12:17 #24
du skal ha et ; til sidst på sætningen, det var det eneste :)...

det sjove ved det hele er at det virker fint med conn.close men ok jeg kan jo ikke være sikker på den lukker forbindelse med den så jeg ændre det lige til det andet.

hvad mener du med at du sikre der er ryddet op efter dig ved brug af using metoden?
Avatar billede dr_chaos Nybegynder
06. december 2006 - 12:20 #25
conn.close virker fordi du bare har kopieret conn til cmd.connection.
Det betyder at du ikke behøver at kalde dispose på conn og cmd.
Det vil sige at der bliver ryddet op efter dig.
Avatar billede offerlam Nybegynder
06. december 2006 - 12:23 #26
rydet op efter hvad ? :)....taler vi om at vi søger for der lukkes for forbindelsen til sql serveren eller?
Avatar billede dr_chaos Nybegynder
06. december 2006 - 13:50 #27
ja og om at rydde op i hukommelsen.
Avatar billede offerlam Nybegynder
07. december 2006 - 13:40 #28
ah ramne ok mange tak
Avatar billede dr_chaos Nybegynder
07. december 2006 - 13:43 #29
np :)
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