webForumDet fria alternativet

INSERT från aspx

19 svar · 463 visningar · startad av piddy

piddyMedlem sedan aug. 200253 inlägg
#1

Hej alla glada!!

Tips på hur man läser in data från formuläret till databasen mottages tacksamt.

Har en mängd olika webbkontroller som jag ska utläsa data ifrån
och när jag trycker på Skicka knappen vill jag att INSERT-queryn ska köras. Hur gör jag?

Vad har uttrycket ' " & strNamn & " ' ersatts av i .NET?

ptypeMedlem sedan juni 2002151 inlägg
#2

Data från formuläret läses genom att läsa från rätt kontroll. Antag t.ex. att du vill läsa av innehållet i en TextBox tb. Innehållet når du då genom tb.Text.

Den kod du vill ska köras när man klickar på knappen lägger du i knappens Click-event. Kör du VS .Net, så gå in under eventfliken på knappen (ser ut som en blixt), och dubbelklicka så skapas en funktion åt dig. Kod för hur man kör SQL-kommandon, t.ex. INSERT, hittar du nog i andra inlägg i detta forum.

fredrikMedlem sedan dec. 19991 072 inlägg
#3

Vad har uttrycket ' " & strNamn & " ' ersatts av i .NET?

Det fungerar fortfarande att göra så, men det finns bättre sätt.

String.Format("INSERT INTO tblTable Name VALUES ('{0}')", strName)
piddyMedlem sedan aug. 200253 inlägg
#4

ja, jag har tänkt mig det hela just så - när jag trycker på min submitknapp ska jag både kolla att alla fält är korrekt ifyllda samt köra INSERT-satsen.

Letar desperat efter den där blixt-knappen men jag hittar inte på den - ligger den i Proportis-fönstret?

Jag vore själaglad om någon vänlig människa ville visa mig ett kodexempel...

piddyMedlem sedan aug. 200253 inlägg
#5

eller det kanske är enklare att utgå från min egen kod...

sub Submit(sender as object, e as EventArgs)

dim strSQL = "INSERT INTO Nyhet( StartDatum, SlutDatum) VALUES (???)"

??

end sub

i html-delen:

<asp:textbox id="tbStartDatum" runat="server" Width="100" Height="22" />
<asp:textbox id="tbSlutDatum" runat="server" Width="100" Height="22" />

NETworkMedlem sedan juni 20011 732 inlägg
#6

Du använder vs.net? Bra. :)

Använd validationcontrols för att kolla om fälten är rätt ifyllda, dessa fixar detta på KLIENTEN så du slipper en roundtrip tillbaka till servern). Du hittar de olika validatorerna under webforms i din toolbox, exempelvis RequiredFieldValidator. Om du ska göra kontroller mot befintliga data i din databas så måste du dock göra det serverside av naturliga skäl...

När du har validerat dina kontroller så hoppar du in i din funktion där du kör din insertsats. Dubbelklicka bara på din button i designläget så skapas funktionen automatiskt. Du kan göra det manuellt också, antingen genom en OnCLick i kontrollen (funkar inte riktigt på samma sätt!) eller under "blixtknappens" onclick i properties-fönstret. Beroende på vilken databas och teknik du vill använda så kan en insert se olika ut varav två exempel finns listade ovan.

Var det svar på din fråga?

piddyMedlem sedan aug. 200253 inlägg
#7

usch, vad jag känner mig besvärlig nu...

men när jag trycker på min knapp i designläge händer inget alls. ingen automatisk funktion skapas =(

piddyMedlem sedan aug. 200253 inlägg
#8

måste kolla en annan sak också, när jag skapat mitt dataset har jag skrivit på följande vis:

dim objA as new OleDbDataAdapter ("SELECT * FROM Tabell1 " ,oConn)

dim objB as new OleDbDataAdapter ("SELECT * FROM Tabell2", OConn)

dim objC as new OleDbDataAdapter ("SELECT * FROM Tabell3", OConn)

dim ds = new DataSet()

objA.Fill(ds, "Tabell1")
objB.Fill(ds, "Tabell2")
objC.Fill(ds, "Tabell3")

..nu fick jag för mig att jag gjort dubbelt jobb och inte utnyttjat tekniken med att ett dataset kan fylla med flera tabeller....ser min kod ok ut?

NETworkMedlem sedan juni 20011 732 inlägg
#9

Ta bort knappen och börja om. I din toolbox, dra ut en "Button" på din sida i designläget. Dubbelklicka på den så kommer du att hamna i en nyskapad funktion i din kod-fil. Skriv någon enkel test-kod här (Response.Write("hej") och kompilera. Kör sidan och prova att du kommer in och kör funktionen när du klickar på knappen. Det bör du göra...

Ska du fylla ett dataset med flera tabeller så måste du ställa en ny fråga för varje tabell.

piddyMedlem sedan aug. 200253 inlägg
#10

det riktigt knäppa är att när jag dubbelklickar på min nyskapade knapp så hamnar jag inte alls i nån ny funktion utan i <asp:button>-taggen...*gråt*

ptypeMedlem sedan juni 2002151 inlägg
#11

Verkar mysko. Men som sagt, prova istället att välja Properties för knappen och gå till fliken events (blixten). Dubbelklicka på OnClick. Då borde en ny metod skapas åt dig.

(Fungerar det fortfarande inte, så lägg till i asp:button-taggen: OnClick="funktionsNamn")

piddyMedlem sedan aug. 200253 inlägg
#12

Hur skriver man Insertsatsen om Values är av flera typer (string & bool & int)?

NETworkMedlem sedan juni 20011 732 inlägg
#13

Hur skriver man Insertsatsen om Values är av flera typer (string & bool & int)?

Det är inga konstigheter, du kan blanda hur du vill. Skillnaden ligger i sql, en sträng ska sparas mellan ' ' - tecken, en int ska inte det. Typ. Det finns ett väldigt trevligt sql-forum där du kan få mycket bättre hjälp med detta! :)

INSERT INTO Tabell (bool, string, int) values ("+bool+", '"+string+"', "+int+")

piddyMedlem sedan aug. 200253 inlägg
#14

Ok. Bra. Någon som har lust att utveckla det Fredrik skrev om INSERT, vad står {0} för??

renholmMedlem sedan apr. 20012 266 inlägg
#15

{0} står för strName. Här är ett exempel

string SQL = string.Format("UPDATE news SET title = {0}, date = {1}", tbTitle.Text, DateTime.Now);

Så numret mellan {} representerar variblarnas index.

piddyMedlem sedan aug. 200253 inlägg
#16

så sql-satsen ska alltid omgärdas med string.format ('här
står queryn') - oavsett om den innehåller variabler med t.ex int (tänkte på exemplet med Date här ovan)??

fredrikMedlem sedan dec. 19991 072 inlägg
#17

string.format() är bara en metod som underlättar för dig att arbeta med strängar.

I gamla ASP och VB använda man ofta konkatunering där man påbörjade och avslutade en sträng för att "baka" in variabler.

Ex.

strSQL = "INSERT INTO tblTable (ID, Name) VALUES (" & lngID &", '" & strName &"')"

För varje kontaktunering du gjorde var applikationen tvungen att skapa en ny plats i minnet för att kunan slå ihop de olika strängarna och variablerna. Detta var förstås väldigt minnes-krävande (särskilt vid loopar) och onödigt.

I .NET finns det flera sätt att arbeta med strängar. Ett sätt är alltså "String.Format()" som låter dig skriva en sträng och sätta {*tal*} för varje variabel du vill använda.

Ex:

dim strName as string = "Fredrik"
dim strLanguage as string = "VB"
dim strWelcome = String.Format("Välkommen {0} som kodar {1}!", strName, strLanguage)

Detta resulterar alltså i "Välkommen Fredrik som kodar VB!"
Då "strName" är den första variablen som skickas med efter strängen är fylls den i utrymmet döpt {0} (index 0-baserad) och "strLanguage" i {1} osv.

Det har alltså inte speciellt något att göra med SQL, utan är bara till för att underlätta skapande av SQL-strängen. Vill du hårdkoda vissa värden kan du skriva:

dim strSQL = String.Format("INSERT INTO tblTable (ID, Name) VALUES ({0},'EGET VÄRDE')", lngID)

Andra metoder för just konkatunering är "String.Concat" eller att helt enkelt använda "StringBuilder"-klassen i "System.Text" som är byggt för lite större sträng-hantering.

piddyMedlem sedan aug. 200253 inlägg
#18

tack Fredrik, vilket toppenbra exempel! =)

om vi nu ska fortsätta på den pedagogiska banan, hur hade du kodat för att skriva "Välkommen Fredrik 23 år som kodar VB"? Alltså, blir det något problem med String.Format när man blandar string och int..eller kan man skriva något i denna stil?

dim strName as string = "Fredrik"
dim intAlder as int = "23"
dim strLanguage as string = "VB"
dim strWelcome = String.Format("Välkommen {0} {1} år som kodar {2}!", strName, intAlder, strLanguage)

piddyMedlem sedan aug. 200253 inlägg
#19

skulle man kunna göra något liknande:

dim strNamn = DDL.Namn.Value //värdet  från en drop-downlist
dim intAlder = tb.Alder.Value  //värdet från en textbox

dim strSQL = String.Format("INSERT INTO tblTable (name, age) VALUES ({0},{1})", strNamn, intAlder)

(sorry att jag frågar så mycket, jag är otroligt glad att ni står ut med mig!!)

fredrikMedlem sedan dec. 19991 072 inlägg
#20

Ja, du kan blanda flera olika datatyper med String.Format().

Men, för att vara 100% säker på att typ-kontollen blir rätt kan du konvertera dina icke-strängar till strängar:

Dim i As Integer = 12
Dim b As Boolean = True
Dim str As String = String.Format("Test {0}, igen {1}", i.ToString, b.ToString)
132 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)