1. Jag vill hämta en post i en SqlServer Db
2. Lägga in ett värde i en textbox
3. Hur ska det se ut... ??? (har förstått att rs dagarna numera är förbi).
Miljö:
SQL Server 2003
Visual Studio 2003 Sp 1
Har letat lite på nätet. Men antar att det här är för lätt för att få vara med. Därför måsta ju jag fråga om det...
Så här långt ser det ut så här:
Dim t
SQL = "Select tblGuestbook.Guestbook From tblGuestbook Where tblGuestbook.ID = Request.QueryString(ID)"
Dim Conn As New SqlConnection(strConn)
Dim Command As New SqlCommand(SQL, Conn)
Conn.Open()
Command.ExecuteNonQuery()
Response.Write(t)
Txt_Gbook.Text = t
Conn.Close()
Ja den koden du har ovan "ExecuteNonQuery" exekverar bara sql-koden på sql-servern och ger inget svar, utom hur många rader som ändrades. Använd en sqldatareader eller fyll med en adapter till dataset/datatable.
Typ så här då, eller? "Chansar vilt, känns det som..."
Public Sub FillTextField()
Dim SQL As String
SQL = "Select tblGuestbook.Guestbook From tblGuestbook Where tblGuestbook.ID = " & Request.QueryString("Id")
Response.Write(SQL & "<br>")
Dim Conn As New SqlConnection(strConn)
Dim Command As New SqlCommand("SQL", Conn)
Conn.Open()
Dim minReader As SqlDataReader = Command.ExecuteReader()
minReader.GetString(SQL)
Do While minReader.Read()
Txt_Gbook.Text = minReader.GetString(0)
Loop
minReader.Close()
Conn.Close()
End Sub
Den här koden genererar ett felmeddalnde som:
Could not find stored procedure 'SQL'
Vilket gör mig något förvirrad. Använder mig inte av lagrade procedurer...
Finns det effektivare kod när man endast ska läsa en post?
Public Sub FillTextField()
Dim SQL As String
SQL = "Select tblGuestbook.Guestbook From tblGuestbook Where tblGuestbook.ID = " & Request.QueryString("Id")
Response.Write(SQL & "<br>")
Dim Conn As New SqlConnection(strConn)
Dim Command As New SqlCommand(SQL, Conn)
Conn.Open()
Dim minReader As SqlDataReader = Command.ExecuteReader()
While minReader.Read()
Txt_Gbook.Text = minReader.GetString(0)
end while
minReader.Close()
Conn.Close()
End Sub
Med extremt små fnuttifikationsändringar så blev det följande fungeraande variant:
Dim SQL As String
SQL = "Select tblGuestbook.Guestbook From tblGuestbook Where tblGuestbook.ID = " & Request.QueryString("ID") & " "
Response.Write(SQL & "<br>")
Dim Conn As New SqlConnection(strConn)
Dim Command As New SqlCommand(SQL, Conn)
Conn.Open()
Dim dr As SqlClient.SqlDataReader = Command.ExecuteReader()
If dr.Read() = True Then
Txt_Gbook.Text = dr("Guestbook")
End If
Conn.Close()
DataReadern använder du för att ta ut flera rader eller en rad med flera kolumner. Om du bara skall ta ut ett värde från en kolumn använder du ExecuteScalar. Om din sql sats skulle retunerar flera rader så tar ExecuteScalar det första värdet.
Dim sql as string = String.Format("Select tblGuestbook.Guestbook From tblGuestbook Where tblGuestbook.ID = {0}", Request.QueryString("ID"))
Dim conn As New SqlConnection(strConn)
Dim cmd As New SqlCommand(sql, conn)
Try
conn.Open()
Txt_Gbook.Text = cmd.ExecuteScalar().ToString()
Catch
Throw
Finally
conn.Close()
End Try