Jag kommer helt fel i att uppdatera DataSet, när det bara är en textBox att uppdatera. En strategi som är bra att använda när man får det felmeddelandet är följande : Hej Hultan. QuickWatch kan du få fram på flera sätt. Ett sätt är via en tangentkombination, men eftersom jag är gammal VB-kodare så valde jag VB-schema för tangentbordet så om du har valt ett annat schema så har du en annan tangentkombination för QuickWatch. Du kan även nå QuickWatch genom att högerklicka på den markerade texten och välja det i popupmenyn, alternativt via Debug-menyn. Någonstans är det nog galet med min VN för jag hittar inte QuickWatch om jag så fördärmar mig. Vad menar du med VN? Du använder väl Visual Studio.Net?Uppdatera dataset.
<code>
ds.Tables["frånMusikKategori"].Rows[0][a]=KAllaVärden;
</code>
Jag har med mig "KAllaVärden", ocj det fält som skall uppdateras heter "Kategori"
När jag försöker som jag gör, så får jag error:
<code>
Objectsreferensen har inte angetts till en instans av objectet.
</code>
Vad gör jag för fel?Sv: Uppdatera dataset.
<code>
ds.Tables["frånMusikKategori"].Rows[0][a]=KAllaVärden;
</code>
Markera texten "ds" och välj QuickWatch (Shift + F9 om jag minns rätt). Om det står att värdet är null (eller Nothing i VB) så är problemet variabeln ds som inte pekar på ett objekt (dataset).
Kolla sedan samma sak för :
<code>
ds.Tables["frånMusikKategori"]
ds.Tables["frånMusikKategori"].Rows[0]
ds.Tables["frånMusikKategori"].Rows[0][a]
</code>
På det sättet kan du sluta dig till vilken objektreferens som är felaktig. I det här fallet kan det ju bero på följande saker :
* ds pekar inte på ett objekt
* Det finns ingen tabell som heter "frånMusikKategori"
* Det finns ingen rad 0, dvs .Rows.Count=0
* Variablen a har ett felaktigt värde så att ingen kolumn hittas. Variabeln a ska antingen vara ett heltal mellan 0 och antal kolumner minus ett, eller en sträng innehållande namnet på en kolumn.
Sedan skulle jag prova att lägga till ".Value" efter [a], det kan vara det som är problemet. Alltså
<code>
ds.Tables["frånMusikKategori"].Rows[0][a].Value=KAllaVärden;
</code>Sv: Uppdatera dataset.
QuickWatch (Shift + F9 )får jag inte fram, hur jag än gör, hitttar ingenting om det im min VN.
Någonstans så ser jag tydligen helt fel, för fel är det ju.
Så här drar jag igång sa:
<code>
string SQLstring = "Select Kategori FROM t_Kategori Order BY Kategori";
da = new SqlDataAdapter(SQLstring,con);
ds = new DataSet("frånMusikKategori");
try
{
con.Open();
da.Fill(ds,"frånMusikKategori");
con.Close();
int rader = ds.Tables["frånMusikKategori"].Rows.Count;
nr = new string[rader];
for(int a=0;a<rader;a++)
{
listBox2.Items.Add
(ds.Tables["frånMusikKategori"].Rows[a]["Kategori"].ToString());
}
}
</code>
Och den fyller ju upp hur finnt som helst.
Tittar man på
<code>
ds.Tables["frånMusikKategori"].Rows[a]["Kategori"].ToString()
</code>
så borde ju
<code>
ds.Tables["frånMusikKategori"].Rows[0]]["Kategori"]=KAllaVärden;
</code>
stämma eller?
Jag kan inte se något som är galet.
Redan här så är det någonting märkvärdigt:
<code>
string SQL="Select Kategori FROM t_Kategori WHERE Kategori ='" + listBox2.SelectedItem + "'";
da = new SqlDataAdapter(SQL,con);
ds = new DataSet("frånMusikKategori");
con.Open();
da.Fill(ds,"frånMusikKategori");
con.Close();
textBox13.Text=ds.Tables["frånMusikKategori"].Rows[0]["Kategori"].ToString();
KkategoriView();//för att kunna se vilka ArrNo som har vilka kategorier
MessageBox.Show(ds.Tables["frånMusikKategori"].Rows[0]["Kategori"].ToString());
</code>
Som du ser så fyller jag upp textrutan ifrån ds.Tables["frånMusikKategori"], inga problem, men när jag lite längre ner vill titta på det via MessageBox, då får jag samma fel som tidigare.
Märkvärdigt...Sv: Uppdatera dataset.
Tyvärr har jag inga fler idéer om vad felet kan vara med koden...ska ta mig en funderare till...Sv: Uppdatera dataset.
I alla fall så löste jag problemet, ett förargligt stavfel.
Tack för din hjälp.Sv: Uppdatera dataset.
Jag tyckte det var självklart och man vill ju inte förolämpa någon genom att påpeka det uppenbara, men eftersom du inte hittar QuickWatch så påpekar jag det i alla fall :-)
Du måste vara i debug-läge för att kunna använda QuickWatch...alltså, sätt en breakpoint och se till att exekveringen stannar där.