Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


En fråga om INSERT INTO som jag inte förstår

Postades av 2004-04-04 20:12:53 - Gert Lindholm, i forum asp.net generellt, Tråden har 11 Kommentarer och lästs av 550 personer

Hoppas Ni inte tycker detta tär tjatigt. För hur mpnga har nte frågat om hur man gör när man skall lägga till poster i en databas typ Access.

Har ett exempel jag hittat på nätet och skulle vilja få lite förtydligande om:

Jag förstår hitintills varför man skiriver INSERT INTO och Values, men sen på raderna under vad gör dom för något?

string sqlCmd = "INSERT INTO Lists (Name, Description) VALUES (@ListName, @ListDescr)";
OleDbConnection myConn = new OleDbConnection(connString);

OleDbCommand myCmd = new OleDbCommand(sqlCmd, myConn);
myCmd.Parameters.Add(new OleDbParameter("@ListName", OleDbType.VarChar, 50));
myCmd.Parameters["@ListName"].Value = ListName.Trim();
myCmd.Parameters.Add(new OleDbParameter("@ListDescr", OleDbType.VarChar, 250));
myCmd.Parameters["@ListDescr"].Value = ListDescr.Trim();;

Betyder detta att man kan från en textbox kapa av text när man kör frågan så att bara i fallet ovan tar med 50 första tecken?




Svara

Sv: En fråga om INSERT INTO som jag inte förstår

Postades av 2004-04-05 06:37:19 - Pelle Johansson

Hej, i detta fall så är svaret nej. Man säger att en parameter i den lagrade proceduren är av typen varchar och 50 tecken lång. Det som inte kontrolleras här eller kan ge fel är att om strängen är längre än 50 tecken så kommer datat adderas till tabellen men trunkeras så bara 50 tecken sparas och du kommer samtidigt att få ett felmeddelande från exempelvis sql att "field xx is truncated". Som sagt, datat sparas men du kommer få ett fel.

För att undvika felet får man även vid .Value sätta Left(txtfirstname.text,50) för att slippa ev felmeddelande. Hoppas detta gav svar på din fråga.


Svara

Sv: En fråga om INSERT INTO som jag inte förstår

Postades av 2004-04-05 08:43:42 - Mikael Wedham

För att lägga till lite mer...

Parametrar är ett "nytt" sätt att få databaserna (de som kan) att förbereda frågan på ett smartare sätt. Det betyder att man har en färdig körning som man skickar in värden i. Detta går oftast snabbare än att göra på det gamla sättet med vanlig SQL.

/micke


Svara

Sv: En fråga om INSERT INTO som jag inte förstår

Postades av 2004-04-05 23:18:15 - Gert Lindholm

Man bör alltså programerings teknikst ha med dessa parametrar. eller är det bara överkurs?


Svara

Sv: En fråga om INSERT INTO som jag inte förstår

Postades av 2004-04-06 05:25:02 - Pelle Johansson

Både ja och nej är väl svaret på den frågan. Att skriva detaljerat vad som gäller är inte fel men rent tidsmässigt vid en ändring i en tabell som du förstår förknippad med merarbete. Först måste du ändra i tabellen, sen i den lagrade proceduren och sist i klassen som arbetar mot datat.

Sen tror jag men vågar inte svära på det - tar lite extra tid vid varje sådan deklaration för ADO som måste fyllas med mer data från de olika objekten jämför med en klassisk sql-sträng. Men även där finns det drawbacks med bl.a. sql-injection och du måste även ändra där, men dock inte fälttypsförändringar för det sköts då automatiskt då du bara anger fältnamnen.

Insert into tabell (1,2,3) values('a','b','c')


Svara

Sv: En fråga om INSERT INTO som jag inte förstår

Postades av 2004-04-06 10:19:22 - Mikael Wedham

Precis som Pelle säger är det säkerhet säkerhet säkerhet som gör att man skall ha dessa parametrar. Prestandapåverkan är relativt liten, då SQL (om det är den...) kan cacha frågorna på ett effektivare sätt med parametrar...

/micke


Svara

Sv: En fråga om INSERT INTO som jag inte förstår

Postades av 2004-04-06 19:45:02 - Gert Lindholm

Tack för era svar , Micke jag kör mot Access, tror jag skrev det i min fråga, var lite trött så min timing på tgb var nog inte vad den brukar.

Men om jag förstår Er rätt så räcker det igentligen med att bara ha SqlCmd="INSERT INTO Kund (Id, Namn, osv) VALUES (@IDtextbox, @NamnTextbox, @osvTextbox)";
OleDbConnection myConn = new OleDbConnection(connString);

Så lägger den till ny post?


Svara

Sv: En fråga om INSERT INTO som jag inte förstår

Postades av 2004-04-07 08:30:36 - Mikael Wedham

Det stog "typ Access" så jag antog väl lite...

Nej, så kan du inte göra! Om du inte vill ha parametrarna så måste du fylla i värdena istället.
<code>
SqlCmd="INSERT INTO Kund (Id, Namn) VALUES (4 , 'Namnet' )";
</code>

Du måste alltså mata in värdena, så du skriver väl ungefär såhär:
<code>
SqlCmd="INSERT INTO Kund (Id, Namn) VALUES (" + txtID.Text + " , '" + txtNamn.Text + "' )";
</code>

/micke


Svara

Sv: En fråga om INSERT INTO som jag inte förstår

Postades av 2004-04-08 09:35:00 - Roger Gusthage

På vilket sätt skiljer sig då båda sätten rent säkerhetsmässigt? I den "rena" sql satsen syns givetvis mer om hur tabellen är uppbyggd etc. Är det säkerhetsförlusten i att skriva ut detta i klarttext som du menar?


Svara

Sv: En fråga om INSERT INTO som jag inte förstår

Postades av 2004-04-15 00:04:13 - Pelle Johansson

I mickes fall är det rent livsfarligt - den sk sql-injection. En korrekt lösning är i så fall om vi pratar säkerhet:

<code>
SqlCmd="INSERT INTO Kund (Id, Namn) VALUES (" + Replace(txtID.Text,"'","''") + " , '" + Replace(txtNamn.Text,"'","''") + "' )";
</code>

Med replace-kommandot ersätter man ' med '' vilket är väldigt enkelt men gör att sql-satser inte kan köras med det som står i textfälten man anger.


Svara

Sv: En fråga om INSERT INTO som jag inte förstår

Postades av 2004-04-15 09:12:11 - Mikael Wedham

Fast det allra bästa är fortfarande parametrar...

/micke


Svara

Sv: En fråga om INSERT INTO som jag inte förstår

Postades av 2004-04-15 17:41:02 - Fredrik Normén

Replace på ' behöver inte alltid lösa alla problem, jag skulle rekommendera att använda parametrar istället, ADO.Net ser till att formatera dem så att inget tecken kan bryta frågan.

Frågan nedan kommer att se till så SQL servern gör en shutdown. För age är integer och innhåller ingen '. Du kan även sätta age till 35 shutdown utan ; och servern skulle startas om.

string name = "fredik ' or 1=1--";
string age = "35; shutdown --";
name = name.Replace("'","''");
age = age.Replace("'","''");
string sql = "SELECT * FROM Employees WHERE firstname = '" + name + "' or employeeid = " + age;

I boken Writing Secure Code second edition sidorna 401-411 kan du läsa om varför det inte räcker enbart med replace på en enkelfnutt. På sidan 402 står det:

Caution: Escaping characters might not make you immune to SQL injection attacks.

På sidan 404, under rubriken: Remedy #2: Building SQL Statements Securely står det att parametrar ska användas för att göra frågan säker.

Use parameterized queries- not string concatenation-to build queries.

Boken är utgiven av Microsoft Press och har ISBN: 0735617228

/Fredrik Normén NSQUARED2
http://normen.mine.nu


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 166
27 952
271 704
638
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies