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);
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.