webForumDet fria alternativet

hämta poster ur dataset

.NET

24 svar · 523 visningar · startad av Prästen

Medlem sedan dec. 2000537 inlägg
Frågan#1

hej.

jag får ett error när jag försöker hämta poster ur mitt dataset.

string post=mittDataset.Tables["person"].Rows[0]["fornamn"].ToString();

error:
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

vet nån vad det kan vara för fel?.

Medlem sedan juni 20011 732 inlägg
#2

Du försöker hämta något som inte finns, mao finns det ingen post där i ditt dataset.

Medlem sedan dec. 2000537 inlägg
#3

jorå det fanns det. verkar ju inte funkar ändå ju.

Medlem sedan sep. 20011 914 inlägg
#4

Visa koden för funktionen koden ligger i så är det lättare att hjälpa. :)

Medlem sedan dec. 2000537 inlägg
#5
System.Data.DataSet MyQueryMethod(System.Data.DataSet dataSet, string sqlQueryString) {
System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection("server=\'DATORN\\MINSQLSERVER\'; trusted_connection=true; Database=\'personer\'");
System.Data.SqlClient.SqlDataAdapter dataAdapter = new System.Data.SqlClient.SqlDataAdapter(sqlQueryString, sqlConnection);
dataAdapter.Fill(dataSet);
sqlConnection.Close();
return dataSet;
      }

      void Page_Load(Object sender, EventArgs e) {
  System.Data.DataSet mittDataset=new System.Data.DataSet();
  mittDataset=MyQueryMethod(mittDataset, "SELECT [person].[fornamn], [person].[efternamn], [person].[gatunamn], [person].[postnummer], [person].[postort], [person].[ID] FROM [person]");
  string post=mittDataset.Tables["person"].Rows[0]["fornamn"].ToString();
  }
Medlem sedan juni 20011 732 inlägg
#6

Heter tabellen person och inte Person då!? Dubbelkolla så att du inte gjort den typen av missar. Räkna antalet rader i ditt dataset med count eller släng in ditt dataset i en datagrid och exekvera sidan. Man ska aldrig vara säker på innehållet i något innan det är bevisat, har jag lärt mig. :)

Medlem sedan juni 20011 732 inlägg
#7

Tips vad gäller koden ovan. Använd namespace så får du betydligt renare kod!!!

Medlem sedan sep. 20011 914 inlägg
#8

Ett annat tips. Ta bort sqlConnection.Close(). DataAdapter sköter öppning och stängning automatiskt.

Medlem sedan dec. 2000537 inlägg
#9

jag har testat att sätta dataset:et till ett datagrid och det funkar.

sätta namespace?, ja just ja.
mja, jag gillar att ha stenkoll på var jag har mina klasser :)

Medlem sedan sep. 20011 914 inlägg
#10

Om du sätter

string post=mittDataset.Tables[[b]0[/b]].Rows[0]["fornamn"].ToString();
Medlem sedan juni 20011 732 inlägg
#11

Fungerar detta?

string post=mittDataset.Tables[0].Rows[0][0].ToString();

Namespace gör att du slipper skriva "sökvägen" till dina klasser varje gång du ska nå dem. .net räknar istället själv ut vilket namespace den ska leta i vilket sparar mycket kod. Exempelvis:

using System.Data;
using System.Data.SqlClient;

DataSet MyQueryMethod(DataSet dataSet, string sqlQueryString) {
SqlConnection sqlConnection = new SqlConnection("server='DATORN\\MINSQLSERVER'; trusted_connection=true; Database='personer'");
SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlQueryString, sqlConnection);
dataAdapter.Fill(dataSet);
return dataSet;
      }
Medlem sedan dec. 2000537 inlägg
#12

gott det funkar.
men varför kan jag inte skriva mittDataset.Tables["person"] ?

Medlem sedan juni 20011 732 inlägg
#13

Därför att person inte finns. :) Du måste ge tabellen ett namn:

dataAdapter.Fill(dataSet, "person");

Kan väl tillägga att det är rätt onödigt att använda ett helt dataset om du ändå bara ska jobba mot en tabell.

Medlem sedan sep. 20011 914 inlägg
#14

Tabelen i datasetet tilldelas namnet "Table" och inte det namn som du hämtar ut data ifrån. 0 indikerar att du skall hämta data från första datatablen i datasetet och inte vill köra datasetets uppdateringsmetoder. Overkill! Använd en datatable istället.

Medlem sedan juni 20011 732 inlägg
#15

Sedan returnerar du ett dataset där du sedan skapar ett nytt dataset som du fyller det befintliga datasetet med. Varför? Du har ju redan ditt dataset färdigt första gången!

Medlem sedan sep. 20011 914 inlägg
#16

OT: Network, makt missbruk. :birp

Medlem sedan juni 20011 732 inlägg
#17

Wee, makt berusar!!! :r

Medlem sedan dec. 2000537 inlägg
#18

1.men tabellen heter ju faktiskt "person", varför funkar det inte?.
med att bara skriva tabellnamnet?

2. ja just, tänkte inte på att en metod kan returnera i sina egna parametrar.

Medlem sedan dec. 2000537 inlägg
#19

vad är en datatable och hur funkar den?

Medlem sedan mars 20023 561 inlägg
#20

DataTable är en lite enklare variant av DataSet:et med färre funktioner.

264 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)