Archief - ODP.NET in C#: Parameters

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Vin

Legacy Member
Ik heb een probleem bij het invoeren van parameters in mijn SQL queries, gebruik makend van ODP.NET in C#

De volgende query werkt vlekkeloos:
Code:
OracleCommand cmdGG = new OracleCommand("SELECT * FROM gebruikers WHERE gebruikersnaam = 'dummy06' AND paswoord = 'paswoord'", connectie);

Wanneer ik echter parameters wil gebruiken om gebruikersnaam en wachtwoord door te geven, loopt alles mis. Zie volgend codefragment.
Alles wat staat uitgecommentarieerd zijn zaken die getest zijn en niet werken.
Hetgeen niet uitgecommentarieerd staat is mijn laatste, tevergeefse poging.
Code:
OracleCommand cmdGetGebruiker = new OracleCommand("SELECT * FROM gebruikers WHERE gebruikersnaam = :gebruikersnaam AND paswoord = :wachtwoord", connectie);
            cmdGetGebruiker.BindByName = true;
            //cmdGetGebruiker.Parameters.Add("GEBRUIKERSNAAM", OracleDbType.Varchar2, System.Data.ParameterDirection.Input);
            //cmdGetGebruiker.Parameters["GEBRUIKERSNAAM"].Value = gebruikersnaam;
            //cmdGetGebruiker.Parameters.Add("WACHTWOORD", OracleDbType.Varchar2, System.Data.ParameterDirection.Input);
            //cmdGetGebruiker.Parameters["WACHTWOORD"].Value = wachtwoord;
            //OracleParameter paramGebruikersnaam = cmdGetGebruiker.CreateParameter();
            //paramGebruikersnaam.ParameterName = "GEBRUIKERSNAAM";
            //paramGebruikersnaam.Value = gebruikersnaam;
            //paramGebruikersnaam.OracleDbType = OracleDbType.Varchar2;
            //paramGebruikersnaam.Direction = System.Data.ParameterDirection.Input;

            //OracleParameter paramWachtwoord = cmdGetGebruiker.CreateParameter();
            //paramWachtwoord.ParameterName = "WACHTWOORD";
            //paramWachtwoord.Value = wachtwoord;
            //paramWachtwoord.OracleDbType = OracleDbType.Varchar2;
            //paramWachtwoord.Direction = System.Data.ParameterDirection.Input;

            //cmdGetGebruiker.Parameters.Add(paramWachtwoord);
            //cmdGetGebruiker.Parameters.Add("GEBRUIKERSNAAM", gebruikersnaam);
            //cmdGetGebruiker.Parameters.Add(paramGebruikersnaam);
            //cmdGetGebruiker.Parameters.Add("WACHTWOORD", wachtwoord);

            OracleParameter paramGebruikersnaam = new OracleParameter("gebruikersnaam", OracleDbType.Varchar2);
            paramGebruikersnaam.Direction = System.Data.ParameterDirection.Input;
            paramGebruikersnaam.Value = gebruikersnaam;
            cmdGetGebruiker.Parameters.Add(paramGebruikersnaam);
            OracleParameter paramWachtwoord = new OracleParameter("wachtwoord", OracleDbType.Varchar2);
            paramWachtwoord.Direction = System.Data.ParameterDirection.Input;
            paramWachtwoord.Value = wachtwoord;
            cmdGetGebruiker.Parameters.Add(paramWachtwoord);

 OracleDataReader rdrGebruiker = cmdGetGebruiker.ExecuteReader();

            Gebruiker gebruiker = null;
            string type = "";
            bool gevonden = false;
            while(rdrGebruiker.Read())
            {
                gebruiker = new Gebruiker(rdrGebruiker.GetString(0), rdrGebruiker.GetString(1));
                type = rdrGebruiker.GetString(2);
            }

            Console.WriteLine(gebruiker.ToString());

De uppercase zaken die in de uitgecommentarieerde code staan zijn van een eerdere poging, waar de parameters in hoofdletters stonden geschreven.
Ook single quotes rond de ':parameters' in de sql query heb ik reeds (zonder resultaat) geprobeerd.

De WriteLine op het einde staat er bij als test, hierbij crasht heel de boel op een NullReferenceException. De query krijgt blijkbaar geen resultaat terug.

Iemand die ziet waar ik de mist in ga?
Alvast bedankt

Vin

Legacy Member
De reden dat ik het allemaal zelf doe is: het is een project voor school, hierbij zijn beperkingen opgelegd aan de technologieën die we mogen gebruiken.

Moto

Legacy Member
Ah oké wel is heel goed van uw school om eerst de basis te laten gebruiken :p

waarom hier niet gewoon uw string samenstellen en executen dus iets als
string.Format("SELECT * FROM gebruikers WHERE gebruikersnaam = {0} AND paswoord = {1}", gebruikersnaam, wachtwoord)

cool_boy_ke

Legacy Member
Moto zei:
waarom hier niet gewoon uw string samenstellen en executen dus iets als
string.Format("SELECT * FROM gebruikers WHERE gebruikersnaam = {0} AND paswoord = {1}", gebruikersnaam, wachtwoord)
Omdat dat een dikke no-no is, je moet parameters gebruiken.

Vin

Legacy Member
Idd, parameters worden normaalgezien voorgecompileerd. Hierdoor ga je SQL injectie tegen.
Probleem is opgelost: een paar zaken (zoals bindByName) waren overbodig, en de parameters moesten ook in de code voorafgegaan worden door een ":".
Iedereen bedankt voor de input!
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan