17. oktober 2004 - 20:34Der er
36 kommentarer og 1 løsning
angive en Int-værdi i oprettelsen af en SQL command-parameter ?
Hej godtfolk,
Hvordan kan jeg angive en parameters Int-værdi i oprettelsen af en command-objekt? F.eks. i nedenstående insert-metode:
------- KLIP ---------
public int insert(string name, string description, int open, string password, int player_id) { // vi opretter en forbindelse til DBen MySqlConnection oConn = GetConnection(); MySqlDataAdapter oAdapter = new MySqlDataAdapter(); MySqlCommand oCommand;
try { // åbner forbindelsen til DB'en: oConn.Open();
// Vi brygge vores INSERT query sammen: oCommand = new MySqlCommand("INSERT INTO league(name, description, is_open, password)VALUES (@name, @description, @open, @password)", oConn);
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
jeg foretager selve kaldet i mit presentationslag:
------ KLIP ---------
private void butCreateLeague_Click(object sender, System.EventArgs e) { // Her skal der noget automatisk validation på i stedet !!! string name = txtLeagueName.Text; string description = txtLeagueDescription.Text; string password1 = txtLeaguePassword.Text; string password2 = txtLeaguePasswordConfirm.Text; int open = 1;
Den vil sgu ikke rigtig lade mig tildele dem på den måde.
Du kan lige se hele min insert-metode. Selve parameterne bliver så parameteroverført når metoden kaldes i præsentationslaget:
----- KLIP -----
public int insert(string name, string description, int open, string password, int player_id) { // vi opretter en forbindelse til DBen MySqlConnection oConn = GetConnection(); MySqlDataAdapter oAdapter = new MySqlDataAdapter(); MySqlCommand oCommand;
try { // åbner forbindelsen til DB'en: oConn.Open();
// Vi begynder at brygge vores INSERT query sammen i form af en MySqlCommand-objekt: oCommand = new MySqlCommand("INSERT INTO league(name, description, is_open, password)"+ "VALUES (@name, @description, @open, @password)", oConn);
// Her opretter vi de forskellige parametre (med angivelse af selve datatypen), // som vi tilføjer til vores MySqlCommand-objekt - der reelt er vores SQL query: oCommand.Parameters.Add("@name", MySqlDbType.VarChar , 100 , "name"); oCommand.Parameters.Add("@description", MySqlDbType.String , 5000 , "description"); oCommand.Parameters.Add("@open", MySqlDbType.Int ,1 , "open"); oCommand.Parameters.Add("@password", MySqlDbType.VarChar , 100 , "password");
// Fortæller adapter at vi vil udføre en INSERT query, og sætter den til at // være lig vores ovenstående og nyopbyggede MySqlCommand-objekt: oAdapter.InsertCommand = oCommand;
oCommand = new MySqlCommand("SELECT @@IDENTITY", oConn); int id = (int)oCommand.ExecuteScalar();
ved ikke lige hvad der sker for mig, men nu vil indsætter den ikke igen. Og derfor returnerer "int id = int.Parse(oCommand.ExecuteScalar().ToString());" bare værdien 0 !
Kender du det, man føler lige at man reelt HAR løst sit problem, og så fucker den skide kode med en alligevel (Grrr...) ;-) Nok mest fordi man er lidt blank !
Men kan du greje hvorfor fan... den ikke indsætter:
---- KLIP ----
public int insert(string name, string description, int open, string password, int player_id) { // vi opretter en forbindelse til DBen MySqlConnection oConn = GetConnection(); MySqlDataAdapter oAdapter = new MySqlDataAdapter(); MySqlCommand oCommand;
try { // åbner forbindelsen til DB'en: oConn.Open();
// Vi begynder at brygge vores INSERT query sammen i form af en MySqlCommand-objekt: oCommand = new MySqlCommand("INSERT INTO league(name, description, password)"+ "VALUES (@name, @description, @open, @password)", oConn);
// Her opretter vi de forskellige parametre (med angivelse af selve datatypen), // som vi tilføjer til vores MySqlCommand-objekt - der reelt er vores SQL query: oCommand.Parameters.Add("@name", MySqlDbType.VarChar , 100 , "name"); oCommand.Parameters.Add("@description", MySqlDbType.String , 5000 , "description"); oCommand.Parameters.Add("@open", MySqlDbType.Int ,1 , "open"); oCommand.Parameters.Add("@password", MySqlDbType.VarChar , 100 , "password");
// Fortæller adapter at vi vil udføre en INSERT query, og sætter den til at // være lig vores ovenstående og nyopbyggede MySqlCommand-objekt: oAdapter.InsertCommand = oCommand;
oCommand = new MySqlCommand("SELECT @@IDENTITY", oConn); int id = int.Parse(oCommand.ExecuteScalar().ToString());
Jeg tror godt at jeg vil smide en 50'er på at jeg har overset en eller anden meget tydelig fejl - tjaa... det må næsten være pengene lige ned i foret ;-)
og bortset fra det - er det den "rigtige" måde jeg trække mit ID ud på. Regnede lidt med at der fandtes en metode alá noget i stil med "getInsertedRowID()".
Hvad opnår man - eller er der en fordel - ved, manuelt at angive parameterne? Jeg ved at man kan lave en direkte query ala: oCommand = new MySqlCommand("INSERT INTO league(name, description, open, password)"+ "VALUES "+ name +","+ description +", "+ open +", "+password +")", oConn);
ok,...det er jo rart at vide "hvorfor" man gør det ene frem for det andet. tak
Synes godt om
Ny brugerNybegynder
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.