Hej! Skrev en inläggning om "Uppdatering av Datagrid" och har kommit fram till var felet ligger. Men nu så undrar jag hur man ska lösa problemet hehe En datareader läser en rad varje gång du gör en myReader.Read. Min gissning är att du gör en koll för att se om readern är tom, och i och med att du gör den kollen så läser du första raden. Det är förmodligen ett "klassiskt" Datareaderfel i din kod.. Hej! Tack för tipset, jag har inte testat än men jag gissar på att ni har rätt. Jag gör ingen test för att se om readern är tom eller ej. Min kod ser ut så: Hej Ola! Tony. Hej Johan! Tony, Hej Johan! Tony... Hej Johan! Tony.. aha! det visste jag inte =) tack så mycket Johan!Datagrid läser inte rätt från en datareader
Det är så att jag har en datagrid som läser information från en datareader. Men denna datagrid läser inte första raden från datareadern, den hoppar gärna över den, på så sätt så visar datagridden inte nånting alls om det finns bara en rad i datareadern.
Kan man ställa in det på något sätt så att man får även första raden från datareadern?
Kan det även vara fel på datareadern? Vet nån om den läser korrekt från DBn?
Jag använder VB.NET som utvecklingspråk
MVH
TonySv: Datagrid läser inte rätt från en datareader
Visa din kod så löser vi problemet.Sv: Datagrid läser inte rätt från en datareader
Tänk på att t.ex. denna rad:
If Dr.Read Then
läser första raden..
Posta de aktuella raderna om du inte hittar det själv nu.. :)
OlaSv: Datagrid läser inte rätt från en datareader
Response.Buffer = False
'Put user code to initialize the page here
Dim connectionString As String = "server=192.168.0.110;"
connectionString += "database=Kundregistret;"
connectionString += "user ID=admin;"
connectionString += "password=123456789;"
connectionString += "Connect Timeout=30"
Dim sqlConnection As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(connectionString)
'2. Create the command object, passing in the SQL string
Dim queryString As String = "SELECT Namn as MemberName, Personnummer as PNo, Adress as dress, Postnr AS PostNo, PostOrt AS PostOrt, telnr AS TelNo, Anslutningsdatum as JoinDate FROM KUNDER"
Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)
sqlConnection.Open()
Dim dataReader As System.Data.SqlClient.SqlDataReader = sqlCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection)
dataReader.Read()
Datagrid.DataSource = dataReader
Datagrid.DataBind()
sqlConnection.Close()
Var ska jag sätta in kontrollen?
MVH
TonySv: Datagrid läser inte rätt från en datareader
jag har testat med:
If dataReader.Read Then
Datagrid.DataSource = dataReader
Datagrid.DataBind()
sqlConnection.Close()
end if
och det funkar inte, hur ska jag göra?
MVH
TonySv: Datagrid läser inte rätt från en datareader
Du kan koppla readern direkt mot din datagrid, det som händer om den är tom är att ingen grid ritas ut.
Du behöver alltså inte kolla om du fått någon data om du inte vill göra ett undantag o säga No data eller nått. I så fall kan du innan du binder (exempelvis) readern bara kolla om den har några rader.
dataReader.HasRows tror jag propertyn heter. (kan den inte i huvudet.)
<code>
if dataReader.HasRows then
Datagrid.DataSource = dataReader
Datagrid.DataBind()
end if
</code>
När du kör en ExecuteReader kan du koppla på ett beteende som säger att den skall stännga din connection så fort readern stänger. Så du behöver inte stänga connection själv.
Mvh JohanSv: Datagrid läser inte rätt från en datareader
Tack för tipset, men min datagrid eller dropdownlist visar inte första raden inne hos datareadern. Tänk om jag har två rader inne i datareadern då? Dvs att det finns rader inne i datareadern men datagriden/dropdownlisten visar bara andra raden av som finns inne i datareadern. Hur ska jag lösa det?
Just nu så är det det problemet jag har, jag har säkert preciserat min fråga fel från början när jag startade tråden... very sorry about that.
MVH
TonySv: Datagrid läser inte rätt från en datareader
Kan du skicka min din Sql fråga samt lite kod där du kopplar dig mot dbn och binder datan?
Har du kört samma fråga i Analyzern eller nått för att se så alla rader är med där?
Du kör inten if dataReader.Read then i din kod va? för den flyttar dig ett steg fram så binder du readern efter detta tappar du första posten.
Mvh JohanSv: Datagrid läser inte rätt från en datareader
Jag har kört frågan inne i analyzer och jag får fram det jag vill ha ja, men inne i aspx sidan så verkar som om datareadern inte vill visa vad den har för nåt på sin första rad.
Jag har klistrat in detta kod tidigare:
Response.Buffer = False
'Put user code to initialize the page here
Dim connectionString As String = "server=192.168.0.110;"
connectionString += "database=Kundregistret;"
connectionString += "user ID=admin;"
connectionString += "password=123456789;"
connectionString += "Connect Timeout=30"
Dim sqlConnection As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(connectionString)
'2. Create the command object, passing in the SQL string
Dim queryString As String = "SELECT Namn as MemberName, Personnummer as PNo, Adress as dress, Postnr AS PostNo, PostOrt AS PostOrt, telnr AS TelNo, Anslutningsdatum as JoinDate FROM KUNDER"
Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)
sqlConnection.Open()
Dim dataReader As System.Data.SqlClient.SqlDataReader = sqlCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection)
dataReader.Read()
Datagrid.DataSource = dataReader
Datagrid.DataBind()
sqlConnection.Close()
där innehåller både sqlfrågan och min datagrid som plockar ut raderna från datareadern. Jag har kollat upp kollumnnamnen redan och allt verkar stämma så gridden fångar upp rätt kolumn, samma sak gäller min dropdownlist.
Jag testade bara med if dataReader.Read then i min kod innan och det funkar inte så jag tog bort det igen.
Kom gärna med förslag på hur jag ska göra... jag har verkligen ingen aning varför det är så.
MVH
TonySv: Datagrid läser inte rätt från en datareader
Du har kvar Read anropet i koden du gav mig:
dataReader.Read() <-------------------------------------
Datagrid.DataSource = dataReader
Datagrid.DataBind()
Sedan behöver du inte köra:
sqlConnection.Close()
du har valt att den skall göra det så fort Readern är closed.
Kör close på readern i stället.
Mvh JohanSv: Datagrid läser inte rätt från en datareader
Tack för tipset, verkar fungera nu, men jag undrar bara, om man inte stänger sqlconnection manuellt, blir det då inte för många öppna anslutningar tills slut som leder till att man inte kan starta en sqlconnection?
MVH
TonySv: Datagrid läser inte rätt från en datareader
Som jag sa ovan så har du valt att stänga conection när du stänger din reader.
Se din kod:
Dim dataReader As System.Data.SqlClient.SqlDataReader = sqlCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection)
Du behöver alltså inte stänga connection då Readern gör det åt dig när du kör close på Readern.
Mvh JohanSv: Datagrid läser inte rätt från en datareader
Nu är problemet helt löst!
TACK!
MVH
Tony