Avatar billede Kim Neesgaard Seniormester
04. oktober 2004 - 19:02 Der er 17 kommentarer og
2 løsninger

Dannelse af et recordset - problem med SqlC ommand

Jeg har stykket følgende kode sammen fra andre indlæg på dette site:

Sub Page_Load(sender As Object, e As EventArgs)

Dim objConn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & server.mappath("db1.mdb") & ";")
objConn.Open()
Dim sqlx As SqlCommand = New SqlCommand("SELECT * FROM tblKategori", objConn )
Dim rs As SqlDataReader = sqlx.ExecuteReader()

Jeg har inkluderet følgende:

<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.Oledb" %>
<%@ import Namespace="System.Data.SqlClient" %>

men får ved kørsel følgende fejl:

Exception Details: System.InvalidCastException: Specified cast is not valid.

i linien, der indeholder SqlCommand??
Avatar billede erve Nybegynder
04. oktober 2004 - 19:08 #1
Det er fordi du forsøger at sende en OleDbConnection til SQLCommand constructoren. Enten skal du bruge en SQLConnection eller en OleDbCommand:
Avatar billede erve Nybegynder
04. oktober 2004 - 19:10 #2
Public Sub CreateMyOleDbCommand()
    Dim myConnection As New OleDbConnection _
      ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=NWIND_RW.MDB")
    myConnection.Open()
    Dim myTrans As OleDbTransaction = myConnection.BeginTransaction()
    Dim mySelectQuery As String = _
      "SELECT * FROM Categories ORDER BY CategoryID"
    Dim myCommand As New OleDbCommand(mySelectQuery, myConnection, myTrans)
    myCommand.CommandTimeout = 20
End Sub
Avatar billede Kim Neesgaard Seniormester
04. oktober 2004 - 23:58 #3
Kan man i mit eksempel udskifte OleDbConnection med SqlConnection? Hvordan aflæser man en enkeltpost i dit eksempel? Du bruger en fast sti i dit eksempel - hvordan bruger man Server.Mappath, som jeg synes er langt mere flexibel?
Avatar billede snepnet Nybegynder
06. oktober 2004 - 19:29 #4
prøv bare at skifte
 
  SqlCommand ud med OleDbCommand
  og
  SqlDataReader ud OleDbDataReader

og denne : <%@ import Namespace="System.Data.SqlClient" %>
har du så ikke bruge for.
(den kan du kun bruge når du skal snakke med en sql-server).

mvh
Avatar billede Kim Neesgaard Seniormester
06. oktober 2004 - 19:54 #5
Lækkert - så godt, så langt. Nu har jeg mit dataset i rs (går jeg ud fra). I almindelig ASP ville man jo sige fx rs("Tekst") for at få værden 'ud' og MoveNext etc. for at bevæge sig rundt. Hvordan gør man det i ASP.NET?
Avatar billede snepnet Nybegynder
06. oktober 2004 - 20:16 #6
ca. på samme måde.
når det nu er en reader du har - kan du gøre sådan her :


while(re.Read())
{
  string tekst = rs["Tekst"].ToString();
}

men der er diverse metoder på readeren du kan bruge (GetInt32, GetString mv.).
du kan eventuelt kigge her :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcontheadonetdatareader.asp

mvh
Avatar billede snepnet Nybegynder
06. oktober 2004 - 20:16 #7
Hov... der skulle selvfølgelig have stået rs begge steder :
while(rs.Read())
{
  string tekst = rs["Tekst"].ToString();
}
Avatar billede Kim Neesgaard Seniormester
06. oktober 2004 - 21:27 #8
Den brokker sig over {} (og manglende end while), men efter korrektion af dette, siger den:
BC30109: 'String' is a class type, and so is not a valid expression.
Avatar billede snepnet Nybegynder
06. oktober 2004 - 21:37 #9
æh ja... nu var det mere princippet jeg ville illustrere... jeg var ikke lige opmærksom på at du skrev i VB - sorry.

While re.Read()
Dim tekst As String = rs("Tekst").ToString()
End While

(der er en oversætter her til en anden gang :o)
http://www.developerfusion.com/utilities/convertcsharptovb.aspx

mvh
Avatar billede snepnet Nybegynder
06. oktober 2004 - 21:38 #10
(eksemplet var i C#)
Avatar billede Kim Neesgaard Seniormester
06. oktober 2004 - 22:04 #11
Det kunne jeg jo også bare have skrevet!
Så vidt jeg kan se af dit link herover, giver rs.Read() en record i tabellen, men hvad er 'Tekst' da efter at hele recordsettet er spolet igennem?

Hvordan vil koden se ud, hvis jeg fx vil gemme feltværdien af kolonnen Tekst af første record i recordsettet rs i en strengvariabel kaldet x?
Avatar billede snepnet Nybegynder
06. oktober 2004 - 22:21 #12
Jeg er ikke helt sikker på at jeg forstod dig, men med udgangspunkt i din egen kode :

Dim objConn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & server.mappath("db1.mdb") & ";")
objConn.Open()
Dim sqlx As SqlCommand = New SqlCommand("SELECT * FROM tblKategori", objConn )
Dim rs As SqlDataReader = sqlx.ExecuteReader()

'læs første record
rs.Read()
'hent værdien i kolonnen Tekst til variablen x som string
Dim x As String = rs("Tekst").ToString()

Kiggede du på det link jeg sendte ?
derfra linkes videre til
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataOleDbOleDbDataReaderClassTopic.asp

som er lidt mere specifikt omkring OleDbDataReaderen.

mvh
Avatar billede Kim Neesgaard Seniormester
06. oktober 2004 - 22:42 #13
Nemlig! Lige hvad jeg mente! Mange, mange tak for den gode startposition - nu arbejder jeg mig videre og ser nærmere på linkene. Det hjælper utrolig godt at blive 'skudt' i gang med noget - ganske vist simpelt - der virker!
Avatar billede Kim Neesgaard Seniormester
06. oktober 2004 - 22:42 #14
snepnet -> giver du et svar?
Avatar billede snepnet Nybegynder
06. oktober 2004 - 23:12 #15
super :o)
held og lykke med det.
mvh
Avatar billede Kim Neesgaard Seniormester
07. oktober 2004 - 19:24 #16
Jeg tillader mig lige et enkelt tillægsspørgsmål: i 'gamle' dage ville man have brugt rs.MoveNext for at komme til næste record - hvordan gør man det i ASP.NET?
Avatar billede snepnet Nybegynder
07. oktober 2004 - 19:41 #17
den der hedder .Read() læser den næste record, så den skulle være tilstrækkelig i den forbindelse.

// sådan en her er sådan en typisk finte
While re.Read()
  'gør noget med re her.
End While
Avatar billede snepnet Nybegynder
07. oktober 2004 - 19:42 #18
altså.... den læser bare derudaf indtil der ikke er flere records.
mvh
Avatar billede Kim Neesgaard Seniormester
07. oktober 2004 - 20:51 #19
Ok tak - det nævnte du også tidligere, men jeg troede bare, at man aktivt skulle flytte pointeren!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester