04. december 2006 - 14:25Der 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.
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";
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
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'
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?
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.
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.
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?
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?
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 ->
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?
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.
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.