Nybörjare i c#, skriv in data till sql

Permalänk
Medlem

Nybörjare i c#, skriv in data till sql

Hej!

Har precis börjat koda och jag tror tyvärr jag har tagit vatten över huvudet denna gång och därför vänder jag mig till er med lite mer erfarenhet.

Programmet jag försöker skriva ser ut såhär:

Och här är koden:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System; using System.Data.SqlClient; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } SqlConnection con = new SqlConnection(); private void button1_Click(object sender, EventArgs e) { string firstname = textBox1.Text; string lastname = textBox2.Text; string adress = textBox3.Text; string stad = textBox4.Text; string username = textBox5.Text; con.ConnectionString = "Server=.\\sqlexpress;database=hr;trusted_connection=true;"; con.Open(); SqlCommand myCommand = new SqlCommand("INSERT INTO users VALUES ('username', 'lastname', 'firstname', 'adress', 'city')", con); myCommand.ExecuteNonQuery(); label2.Text = "Connected and data imported"; con.Close(); } } }

Vad jag försöker göra:
När man trycker på knappen "Connect" så skall datan jag skrivit in i de 5 olika textrutorna skrivas in i min databas som har 5 kolumner med samma namn som textrutorna. Det jag inte förstår är hur jag skall använda mina variablar.
Det fungerar att hårdkoda och skriva tillexempel:

SqlCommand myCommand = new SqlCommand("INSERT INTO users VALUES ('joa', 'Andersson', 'Johan', 'Sweclockers', 'Stockholm')", con);

Men som sagt, jag förstår inte hur jag skall få in mina "strings" i koden. Någon som kan hjälpa mig?

Tack på förhand!

Visa signatur

[Intel Core i5 2500k] [Asus P8Z68-V Pro] [2x ATI 6950 1gb] [Fractal Design XL] [Corsair HX 750W] [Corsair 16Gb 1600MHz] [OCZ SSD Vertex3 120GB]

Permalänk
Skrivet av Stylaren:

Hej!

Har precis börjat koda och jag tror tyvärr jag har tagit vatten över huvudet denna gång och därför vänder jag mig till er med lite mer erfarenhet.

Programmet jag försöker skriva ser ut såhär:
http://i.imgur.com/eXRH7.jpg

Och här är koden:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System; using System.Data.SqlClient; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } SqlConnection con = new SqlConnection(); private void button1_Click(object sender, EventArgs e) { string firstname = textBox1.Text; string lastname = textBox2.Text; string adress = textBox3.Text; string stad = textBox4.Text; string username = textBox5.Text; con.ConnectionString = "Server=.\\sqlexpress;database=hr;trusted_connection=true;"; con.Open(); SqlCommand myCommand = new SqlCommand("INSERT INTO users VALUES ('username', 'lastname', 'firstname', 'adress', 'city')", con); myCommand.ExecuteNonQuery(); label2.Text = "Connected and data imported"; con.Close(); } } }

Vad jag försöker göra:
När man trycker på knappen "Connect" så skall datan jag skrivit in i de 5 olika textrutorna skrivas in i min databas som har 5 kolumner med samma namn som textrutorna. Det jag inte förstår är hur jag skall använda mina variablar.
Det fungerar att hårdkoda och skriva tillexempel:

SqlCommand myCommand = new SqlCommand("INSERT INTO users VALUES ('joa', 'Andersson', 'Johan', 'Sweclockers', 'Stockholm')", con);

Men som sagt, jag förstår inte hur jag skall få in mina "strings" i koden. Någon som kan hjälpa mig?

Tack på förhand!

Nu har jag aldrig jobbat med databaser i c#, men är det inte bara att byta ut dina värden i sql-satsen till variablerna?

Visa signatur
Permalänk
Medlem

Nu är inte heller jag någon expert på C#, men lite vanlig konkatenering borde väl funka?

SqlCommand myCommand = new SqlCommand("INSERT INTO users VALUES ('"+username+"', '"+lastname+"', '"+firstname+"', '"+adress+"', '"+city+"')", con); myCommand.ExecuteNonQuery();

Permalänk
Medlem

VIKTIGT: Att bara stoppa in värden rakt av i en sträng med själva frågan är ju att be om problem, se http://bobby-tables.com/

Om du ska göra rätt, vilket du förstås ska, så vill du använda parametrar i frågan. Finns exempel för .NET/C# på bobby-tables-siten men förstås även om du kikar i MSDN-dokumentationen.

Visa signatur

Desktop spel m.m.: Ryzen 9800X3D || MSI X870 Tomahawk Wifi || MSI Ventus 3x 5080 || Gskill FlareX 6000 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Arbetsstation: Ryzen 7945HX || Minisforum BD790i || Asus Proart 4070 Ti Super || Kingston Fury Impact 5600 65 GB || WD SN850 2TB || Samsung 990 Pro 2TB || Fractal Ridge
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem
Skrivet av evil penguin:

VIKTIGT: Att bara stoppa in värden rakt av i en sträng med själva frågan är ju att be om problem, se http://bobby-tables.com/

Om du ska göra rätt, vilket du förstås ska, så vill du använda parametrar i frågan. Finns exempel för .NET/C# på bobby-tables-siten men förstås även om du kikar i MSDN-dokumentationen.

Sjävklart ska man akta sig för sql-injektioner, men man måste ju ta ett steg i taget Sen så måste jag säga att sidan du länkade till var väldigt rörig, men orkar inte googla upp någon egen så.

Permalänk
Medlem

"Rätt" sätt att använda SqlCommand är att göra såhär

SqlCommand myCommand = new SqlCommand("INSERT INTO users VALUES (@username, @lastname, @firstname, @adress, @city)", con); myCommand.Parameters.Add("@username", username); myCommand.Parameters.Add("@lastname", lastname); myCommand.Parameters.Add("@firstname", firstname); myCommand.Parameters.Add("@adress", adress); myCommand.Parameters.Add("@city", city); myCommand.ExecuteNonQuery();

Vilket bekvämligt nog också löser alla problem med sql-injektion som det tutats om tidigare i tråden automatiskt.