Försöker skapa en tabell som jag fyller med information och till sist binder denna tabell till en datagrid men jag får detta felmedelandet. Vad kan va fel, kan jag lösa det på något annat sätt?? Hej Gustav, Tack för ditt svar men jag tror att du förstod fel. Problemet ligger inte när jag försöker lägga till rader till datagriden. Utan när jag definierar min DataTableProblem med ado tabell
tack på förhand
'dataType' argument cannot be null. Parameter name: dataType
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentNullException: 'dataType' argument cannot be null. Parameter name: dataType
Source Error:
Line 66: '--------- Skapa kolumnhuvud till ADO tabell
Line 67: dtTidrader = New DataTable("Tidrader")
Line 68: dtTidrader.Columns.Add("Starttid", System.Type.GetType("system.datetime"))
Line 69: dtTidrader.Columns.Add("Sluttid", System.Type.GetType("system.datetime"))
Line 70: dtTidrader.Columns.Add("Tim", System.Type.GetType("system.decimal"))
Private Sub LoadTidsrapport()
Dim conTunet As System.Data.OleDb.OleDbConnection
Dim ds As New DataSet
Dim SQL As String
Dim datum As Date
Dim dag As Int32
Dim dtTidrader, dtTidrapport As DataTable
Dim rowTidrad As DataRow
Dim vWeekNbr As Integer
Dim drTider As OleDb.OleDbDataReader
Dim starttid, sluttid As Date
Dim tjanstid As Integer
Dim tim As Decimal
Dim fel As String
'------ Kod för att få fram vecka
If cboDel.SelectedValue = 1 Then
datum = cboYear.SelectedValue + "-" + cboMonth.SelectedValue + "-" + "1"
Else
datum = cboYear.SelectedValue + "-" + cboMonth.SelectedValue + "-" + "16"
End If
vWeekNbr = _
System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetWeekOfYear(datum _
, Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)
'--------- Skapa kolumnhuvud till ADO tabell
dtTidrader = New DataTable("Tidrader")
dtTidrader.Columns.Add("Starttid", System.Type.GetType("system.datetime"))
dtTidrader.Columns.Add("Sluttid", System.Type.GetType("system.datetime"))
dtTidrader.Columns.Add("Tim", System.Type.GetType("system.decimal"))
dtTidrader.Columns.Add("Tjanstid", System.Type.GetType("system.int32"))
Try
For dag = 1 To dag <= 31 Step 1
'----- Öppna förbindelse till databasen
conTunet = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.jet.OLEDB.4.0;" & "Data Source=" & Server.MapPath("tunet.mdb"))
conTunet.Open()
SQL = "SELECT Personal.AnstNR, Personal.Fornamn, Gruppmedlemmar.GruppID, Tjanst.TjanstID, Tjanst.Tid, Schema.Dag, Vecka.VeckoNR, Tjanst.Starttid, Tjanst.Sluttid FROM (((Personal INNER JOIN Gruppmedlemmar ON Personal.AnstNR=Gruppmedlemmar.AnstNR) INNER JOIN Tjanst ON Gruppmedlemmar.GruppID=Tjanst.GruppID) INNER JOIN Vecka ON Gruppmedlemmar.GruppID=Vecka.GruppID) INNER JOIN [Schema] ON (Gruppmedlemmar.GruppID=Schema.GruppID) AND (Gruppmedlemmar.ForarNR=Schema.ForarNR) AND (Vecka.Veckotyp=Schema.Veckotyp) AND (Tjanst.TjanstID=Schema.TjanstID) WHERE (((Personal.AnstNR)=231) AND ((Schema.Dag)=" & dag & ") AND ((Vecka.VeckoNR)=" & vWeekNbr & "));"
Dim cmd = New System.Data.OleDb.OleDbCommand(SQL, conTunet)
drTider = cmd.executereader()
drTider.Read()
starttid = drTider.GetDateTime(7)
sluttid = drTider.GetDateTime(8)
tim = drTider.GetDecimal(4)
tjanstid = drTider.GetInt32(3)
drTider.Close()
'------- Lägg till ny rad til ADO tabell för tidrader
rowTidrad = dtTidrader.NewRow
rowTidrad("Starttid") = starttid
rowTidrad("Sluttid") = sluttid
rowTidrad("Tim") = tim
rowTidrad("Tjanstid") = tjanstid
Next
'------ Stänger förbindelsen till databasen
conTunet.Close()
'------ Bind tabllen tidrader till datagrid dgrTidrapport
dgrTidrapport.DataSource = dtTidrader.DefaultView
dgrTidrapport.DataBind()
Catch ex As Exception
Label1.Text = ex.Message + fel
End Try
end subSv: Problem med ado tabell
Felet framgår här: 'dataType' argument cannot be null. Parameter name: dataType
Vad som sägs är alltså att något av fälten du flyttar till datagriden är null. Du får således använda if not isdbnull(ds(0)) then .. för att känna av om den är null. En annan fuling är att skriva x = "" & ds(0) som faktiskt gör att värdet x inte tilldelas null. .Net är känsligt mot null - try/catch är också en variant för att fånga dessa fel och arbeta med varianter om det uppstår.
Hoppas det hjälpte, lycka tillSv:Problem med ado tabell
Line 66: '--------- Skapa kolumnhuvud till ADO tabell
Line 67: dtTidrader = New DataTable("Tidrader")
Line 68: dtTidrader.Columns.Add("Starttid", System.Type.GetType("system.datetime"))
Line 69: dtTidrader.Columns.Add("Sluttid", System.Type.GetType("system.datetime"))
Line 70: dtTidrader.Columns.Add("Tim", System.Type.GetType("system.decimal"))
Det ska väl inte behöva finnas något värde direkt när man skapar kolumnhuvudet eller?
mvh Gustav