2019-04-27, 15:25
  #1
Medlem
Hej! Jag vill kunna köra en stored procedure i min SQL databas genom en knapp på en websida jag skapat i Visual Studio. Jag kan använda mig av C# och HTML/CSS. Jag har redan gjort några olika ListViews som genom SQLDataSource visar upp innehållet i databasen, men det jag vill göra är att kunna interagera med datan, t.ex. med en knapp sätta rabatt på vissa varor eller mata in data i en table.

Det jag hittar på nätet använder något command som heter "SqlConnection" med massa annat, men det funkar inte för mig, det kommandot finns inte.

Går det att på något sätt koppla antingen en C# knapps _Click event eller en html form för att köra kod i SQL databasen?

Denna hemsidan är ett slutprojekt i SQL och jag har bara gått programmering 1 och Webbutveckling 1 innan så det får inte vara alltför invecklat
Citera
2019-04-27, 21:54
  #2
Medlem
Googla run stored procedure asp.net
Citera
2019-04-29, 12:42
  #3
Medlem
Protons avatar
Databaser -> .NET /Mod
Citera
2019-04-29, 12:44
  #4
Medlem
Protons avatar
Citat:
Ursprungligen postat av Swetard
Hej! Jag vill kunna köra en stored procedure i min SQL databas genom en knapp på en websida jag skapat i Visual Studio. Jag kan använda mig av C# och HTML/CSS. Jag har redan gjort några olika ListViews som genom SQLDataSource visar upp innehållet i databasen, men det jag vill göra är att kunna interagera med datan, t.ex. med en knapp sätta rabatt på vissa varor eller mata in data i en table.

Det jag hittar på nätet använder något command som heter "SqlConnection" med massa annat, men det funkar inte för mig, det kommandot finns inte.

Går det att på något sätt koppla antingen en C# knapps _Click event eller en html form för att köra kod i SQL databasen?

Denna hemsidan är ett slutprojekt i SQL och jag har bara gått programmering 1 och Webbutveckling 1 innan så det får inte vara alltför invecklat
När du laddar en listview med data från en databas använder du en anslutning till databasen, så vad menar du med att "SqlConnection inte finns"?

Hur ser ditt försök ut att exekvera en SP från kod ut nu då tro? Har du gjort nåt eget försök till detta?
Citera
2019-04-30, 17:16
  #5
Medlem
Citat:
Ursprungligen postat av Proton
När du laddar en listview med data från en databas använder du en anslutning till databasen, så vad menar du med att "SqlConnection inte finns"?

Hur ser ditt försök ut att exekvera en SP från kod ut nu då tro? Har du gjort nåt eget försök till detta?

Till Listview används en SqlDataSource från toolboxen i det grafiska gränssnittet. ”SqlConnection” verkar vara en variabeltyp eller nåt. I videorna jag hittat blir ”Sqlconnection” mörkgrönt men för mig blir det instället understruket med rött vilket betyder att det inte finns.

Koden som används ser ut ungefär såhär:
SqlConnection MyConnection = (new SqlConnection.....)
Citera
2019-04-30, 19:29
  #6
Medlem
Protons avatar
Citat:
Ursprungligen postat av Swetard
Till Listview används en SqlDataSource från toolboxen i det grafiska gränssnittet. ”SqlConnection” verkar vara en variabeltyp eller nåt. I videorna jag hittat blir ”Sqlconnection” mörkgrönt men för mig blir det instället understruket med rött vilket betyder att det inte finns.

Koden som används ser ut ungefär såhär:
SqlConnection MyConnection = (new SqlConnection.....)
Att saker blir röda i VS beror på att du saknar korrekta referenser. Har du till exempel lagt till ett beroende (referens) i ditt projekt till System.Data? I det namespacet ligger nämligen SqlConnection (och andra klasser du kommer behöva för att kunna skicka kommandon till din databas).
Citera
2019-06-01, 21:19
  #7
Medlem
comuss avatar
Det här är det klassiska sättet att hämta data från en databas:

https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand?view=netframework -4.8

dvs
Kod:
private static void ReadOrderData(string connectionString)
{
    string queryString = 
        "SELECT OrderID, CustomerID FROM dbo.Orders;";
    using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        SqlCommand command = new SqlCommand(
            queryString, connection);
        connection.Open();
        using(SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                //Gör något med datat, ex. lägg det i en IEnumerable som du kan sätta som DataSource på din ListView
            }
        }
    }
}

Att använda "using" är en bra vana, då slipper man stänga och köra dispose på objekten.

Om du ska anropa en lagrad procedur så går det såklart att bara skriva "exec procedurnamn" och ha det som SQL till SqlCommand men det är mycket bättre att sätta CommandType på ditt SqlCommand-objekt till StoredProcedure och skicka in ev. parametrar med Parameters.Add, då slipper man oroa sig för Sql-injection.
Citera
2019-06-17, 20:38
  #8
Medlem
Citat:
Ursprungligen postat av comus
Det här är det klassiska sättet att hämta data från en databas:

https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand?view=netframework -4.8

dvs
Kod:
private static void ReadOrderData(string connectionString)
{
    string queryString = 
        "SELECT OrderID, CustomerID FROM dbo.Orders;";
    using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        SqlCommand command = new SqlCommand(
            queryString, connection);
        connection.Open();
        using(SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                //Gör något med datat, ex. lägg det i en IEnumerable som du kan sätta som DataSource på din ListView
            }
        }
    }
}

Att använda "using" är en bra vana, då slipper man stänga och köra dispose på objekten.

Om du ska anropa en lagrad procedur så går det såklart att bara skriva "exec procedurnamn" och ha det som SQL till SqlCommand men det är mycket bättre att sätta CommandType på ditt SqlCommand-objekt till StoredProcedure och skicka in ev. parametrar med Parameters.Add, då slipper man oroa sig för Sql-injection.

Håller med i sak, men om proceduren dåligt skriven, exempelvis att den själv bakar ihop SQL som den exekverar dynamiskt så är den fortfarande vidöppen för SQL injection även om du använder parametrar i SqlCommand.
Citera
2019-06-19, 13:15
  #9
Medlem
Sane?s avatar
Citat:
Ursprungligen postat av Mikie
vidöppen för SQL injection även om du använder parametrar i SqlCommand.
Skulle säga att det inte är någon fara alls, visa gärna exempel på motsatsen.
Citera
2019-06-19, 19:33
  #10
Medlem
Citat:
Ursprungligen postat av Sane?
Skulle säga att det inte är någon fara alls, visa gärna exempel på motsatsen.

Jag gick en kurs Secure Web Development and Hacking for Developers för några år sen. I en av uppgifterna skulle vi hitta svagheter i koden. Jag prövade just en SQL injection attack och den lyckades alldeles utmärkt. När jag sen gick igenom koden så blev jag till en början förvånad, för där anropade man just en stored procedure OCH man använde sig av SqlParameter... ändå fungerade SQL injection.

När jag sen gick in i själva procen så visade det sig att den "bakade" ihop SQL i form av en sträng som den sen körde exec på. Den kombinatioen öppnade upp möjligheten för SQL injection TROTS att man använde parametrar.

Här är ett exempel på just detta, kollar du under "Wrong way" så visar de en dåligt skriven procedur som öppnar upp för SQL injection trots att man använder sig av parametrar.

https://blogs.msdn.microsoft.com/brian_swan/2011/02/16/do-stored-procedures-protect-against-sql-injection/

Så... jag skulle säga att jo, det finns en fara om man gör procen på fel sätt.
__________________
Senast redigerad av Mikie 2019-06-19 kl. 19:35.
Citera
2019-06-20, 01:34
  #11
Medlem
Citat:
Ursprungligen postat av Mikie
Jag gick en kurs Secure Web Development and Hacking for Developers för några år sen. I en av uppgifterna skulle vi hitta svagheter i koden. Jag prövade just en SQL injection attack och den lyckades alldeles utmärkt. När jag sen gick igenom koden så blev jag till en början förvånad, för där anropade man just en stored procedure OCH man använde sig av SqlParameter... ändå fungerade SQL injection.

När jag sen gick in i själva procen så visade det sig att den "bakade" ihop SQL i form av en sträng som den sen körde exec på. Den kombinatioen öppnade upp möjligheten för SQL injection TROTS att man använde parametrar.

Här är ett exempel på just detta, kollar du under "Wrong way" så visar de en dåligt skriven procedur som öppnar upp för SQL injection trots att man använder sig av parametrar.

https://blogs.msdn.microsoft.com/brian_swan/2011/02/16/do-stored-procedures-protect-against-sql-injection/

Så... jag skulle säga att jo, det finns en fara om man gör procen på fel sätt.

Håller helt med, spelar ingen roll om man använder en procc eller ej. Allt beror på hur man bygger sin query.

All form av strängkonkatenering av sql queries är strikt förbjudet. Sen spelar det ingen roll om det görs i ett tjänstelager, eller i en proc. Skickar jag ner ett semikolon och terminerar den konkatinerade sqlsträngen och sedan appendar på en query så...

profit.
Citera
2019-06-20, 13:14
  #12
Medlem
Sane?s avatar
Citat:
Ursprungligen postat av Mikie
Jag gick en kurs Secure Web Development and Hacking for Developers för några år sen. I en av uppgifterna skulle vi hitta svagheter i koden. Jag prövade just en SQL injection attack och den lyckades alldeles utmärkt. När jag sen gick igenom koden så blev jag till en början förvånad, för där anropade man just en stored procedure OCH man använde sig av SqlParameter... ändå fungerade SQL injection.

När jag sen gick in i själva procen så visade det sig att den "bakade" ihop SQL i form av en sträng som den sen körde exec på. Den kombinatioen öppnade upp möjligheten för SQL injection TROTS att man använde parametrar.

Här är ett exempel på just detta, kollar du under "Wrong way" så visar de en dåligt skriven procedur som öppnar upp för SQL injection trots att man använder sig av parametrar.

https://blogs.msdn.microsoft.com/brian_swan/2011/02/16/do-stored-procedures-protect-against-sql-injection/

Så... jag skulle säga att jo, det finns en fara om man gör procen på fel sätt.
Fast då är det SP:n som svagheten ligger i, inte SqlCommand.
Förlängningen av ditt argumet är att det inte finns något säkert sätt att anropa en databas, eftersom det kan finnas en osäker SP.
__________________
Senast redigerad av Sane? 2019-06-20 kl. 13:16.
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in