webForumDet fria alternativet

felmeddelande..

.NET

11 svar · 255 visningar · startad av henrikjohansson

Medlem sedan maj 2000360 inlägg
Frågan#1

Jag undrar hur jag åtgärdar detta felet..

Cast from type 'DBNull' to type 'String' is not valid.

    Sub GetNyheter(ByVal Maxantal As Integer)
        Dim myOleDbConn As OleDbConnection
        myOleDbConn = New OleDbConnection()
        myOleDbConn.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings.Get("dbconn")
        myOleDbConn.Open()
        Dim SQL As String = "SELECT top " & Maxantal & " * FROM Nyheter"
        Dim MyOleDbDataAdapter As New OleDbDataAdapter()
        MyOleDbDataAdapter.SelectCommand = New OleDbCommand(SQL, myOleDbConn)

        Dim myDS As New DataSet()
        MyOleDbDataAdapter.Fill(myDS)
        myOleDbConn.Close()

        nyheter.DataSource = myDS
        nyheter.DataBind()  'Det är denna raden den klagar på..

    End Sub

Är det så att den inte klarar av nullvärden i databasen eller?
för när jag fyller i tomma fält i databasen med nått så fungerar det..

fråga 2:
Kan man använda sig av recordset i .net lika lätt som i gamla ASP? hur ser koden ut isf?

Medlem sedan juni 20011 732 inlägg
#2
  1. Jodå, visst ska du kunna fylla exempelvis en datagrid med nullvärden. Eller vad är "nyheter" förresten?

  2. Har aldrig jobbat med gamla ASP, men generellt gäller att allt är lättare (och bättre) än i gamla ASP... :) Exakt vad är ett recordset!? Är det en enklare variant av en datatable/dataset? Om du förklarar det för mig så ska jag försöka svara på din andra fråga!

Medlem sedan maj 2000360 inlägg
#3

1:
min accessdb innehåller en tabell som heter nyheter.
där det är
ID -räknare
Titel -Text
Bild -Text
Texten -PM

och den blir error så fort nått bildfält är tomt

2:
Jo i gamla asp så skrev man typ.. (kommer inte ihåg riktigt)

set rs = server.createobject("ADODB.Recordset") 
rs.open sql, dbconn

och sedan är det enkelt att lägga in och läsa från databasen..

läsa

str1 = rs("falt1")
str2 = rs("falt2")

så här enkelt Uppdaterade man och för att skapa en helt ny post så skrev man bara rs.addnew före

rs("falt1") = "Bengt"
rs("falt22) = "Åke"
rs.update

Finns det nått liknande till .Net och hur ser det ut isf..
(Helst i vb.net men är inget måste)

Medlem sedan juni 20011 732 inlägg
#4
  1. Ok, men vad är "nyheter" för något? En datagrid?

  2. Kan tyvärr inte VB, men ett recordset låter som en simplare variant av en datatable/dataset. Med en datatable kan du lägga en spegling av en tabell från din databas i serverns internminne (ett dataset kan innehålla många tabeller) och arbeta mot denna istället för att jobba direkt mot dbn. Här kan du sedan göra allt - sortera, ta bort, lägga till, uppdatera UTAN att du behöver ha en connection mot din db alls! Behöver du sedan uppdatera din db med en föärändrad datatable så är det naturligtvis inga problem det heller. En datatable kan du även skicka med i viewstate så du aldrig riskerar att tappa den över postbacks.

Ett recordset är med andra ord en sämre variant av en datatable.

Medlem sedan maj 2000360 inlägg
#5

1).
nyheter är en repeater..

  1. ok
Medlem sedan juni 20011 732 inlägg
#6

Hm, konstigt... kan det inte vara så att du i din db måste tillåta null-värden för att kunna läsa dem? Eller det kanske du redan gör?

Medlem sedan maj 2000360 inlägg
#7

jag testade att tillåta nulllängd i databasen men det hjälpte inte..

Var kan man läsa mer om datatable/dataset? det låter som att det är bra att kunna

Du menar alltså att om man skall uppdatera en databas så uppdaterar man först allt i en datatable och sedan synkronisera den mot databasen sedan då?

Är det inte risk för att om det är många användare samtidigt så sitter alla med varsin version av databasen eller uppdateras allas datatables om databasen ändras?

Medlem sedan juni 20011 732 inlägg
#8

Här har du lite läsning:
http://aspnet.4guysfromrolla.com/articles/101602-1.aspx

...och det finns naturligtvis alltid bra information i .net framework sdk dokumentationen!

Medlem sedan maj 2000360 inlägg
#9

ok tack

Medlem sedan juni 20011 732 inlägg
#10

Hm, det var nog en dålig länk förresten, tittade inte så noga. Titta här istället:

http://www.webforum.nu/showthread.php?s=&threadid=60364

Där finns en massa länkar som kan vara värda att bläddra bland...

Medlem sedan maj 2000360 inlägg
#11

ok..
Men det är fortfarande skumt att den klagar på tomma fält i databasen

Medlem sedan juni 20011 732 inlägg
#12

Prova att lägga ditt dataset i en datavy och sen fylla din repeater med datavyn:

Dim myDataView As DataView = New DataView(myDataSet.Tables("tabell"))
Repeater.DataSource = myDataView
Repeater.DataBind()

(med risk för att min vb-kod inte är riktigt rätt...)

255 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)