Laden...

Datensätze an Dataset anfügen

Erstellt von King-Malkav vor 17 Jahren Letzter Beitrag vor 17 Jahren 3.507 Views
King-Malkav Themenstarter:in
264 Beiträge seit 2006
vor 17 Jahren
Datensätze an Dataset anfügen

Hi ich habe ein Problem, ich kann keine Datensätze an ein Dataset anfügen. Ich möchte die Daten nämlich nicht sofort in die Datenbank schreiben, sondern erst später, wenn man bestätigt das man die Ergänzungen hinzufügen möchte.


DataTable dt = myapps.Tables["test"];
        DataRow dr = dt.NewRow();
        dr["App"] = t_apps.Text.ToString();
        dt.Rows.Add(dr);
        lb_apps.DataBind();

Bekomm immer folgende Fehlermeldung:

System.NullReferenceException wurde nicht von Benutzercode behandelt.
Message="Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
Source="App_Web_1iliwdqq"
StackTrace:
bei neueHardware_Beta.appsedit() in c:\Inetpub\wwwroot\BetsandBeta\details.aspx.cs:Zeile 321.
bei neueHardware_Beta.b_appsplus_Click(Object sender, EventArgs e) in c:\Inetpub\wwwroot\BetsandBeta\details.aspx.cs:Zeile 316.
bei System.Web.UI.WebControls.Button.OnClick(EventArgs e)
bei System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
bei System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
bei System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
bei System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Laut Buch ist aber mein Code richtig. Kann jemand helfen?

MFG

F
10.010 Beiträge seit 2004
vor 17 Jahren

Wenn Du uns jetzt noch sagst welche zeile Nummer 321 ist.

Aber dei Fehlermeldung sagt doch eigentlich alles aus, Du grifst auf eine
Variable zu, die nicht angelegt wurde.

Da das eine ASP.NET Anwendung ist, solltest Du bedenken, das hier
alles anders ist als in Windows Anwendungen.

J
3.331 Beiträge seit 2006
vor 17 Jahren

Hallo,
es ist natürlich etwas schwierig, das ohne genaue Kenntnis der Tabelle richtig zu beantworten. Vermutungen: 1. Es gibt Spalten, die nicht null sein dürfen, aber nicht mit Inhalt belegt wurden. 2. Es ist ein PrimaryKey vorgemerkt, aber der dazu gehörige Wert wurde nicht festgelegt.

Viel Erfolg! Jürgen

King-Malkav Themenstarter:in
264 Beiträge seit 2006
vor 17 Jahren

@ FZelle

Zeile 321 ist diese:

DataRow dr = dt.NewRow();

wenn ich vorher schreibe DataRow dr = new DataRow() bekomm ich die Meldung das ich new nicht verwenden darf, wegen den Sicherheitseinstellungen. Das Sagt mir aber nicht wirklich was.

@ juetho

Die Tabelle hat 2 Spalten:

IDNR = Key/autowert
apps = varchar

Aber die Seite kommt ja nicht so weit, es bleibt ja schon in Zeile 321 stehen.

MFG

F
10.010 Beiträge seit 2004
vor 17 Jahren

Und was sagt dein Debugger zu der Zeile?

King-Malkav Themenstarter:in
264 Beiträge seit 2006
vor 17 Jahren

Original von FZelle
Und was sagt dein Debugger zu der Zeile?

Der sagt, das ich erst wieder am Montag nachschauen kann, da mein neuer Rechner noch nicht eingerichtet ist.

MFG

3.728 Beiträge seit 2005
vor 17 Jahren
Tabelle fehlt

Scheinbar gibt es keine Tabelle "test" in Deinem DataSet myapps. dt ist null, oder?

F
10.010 Beiträge seit 2004
vor 17 Jahren

Ich schätze eher, das es kein DataSet gibt 😉

Das ist eine ASP.NET Anwendung, und beliebter Fehler ist hier zu glauben,
das eine Variable länger einen Wert hat, als für eine Aktion.

King-Malkav Themenstarter:in
264 Beiträge seit 2006
vor 17 Jahren

Ich erzeuge das Dataset global und fülle es dann über eine Funktion...

DataSet myapps = new DataSet();

        
        // Apps binden
             
            appsauslesen(HID);
            lb_apps.DataSource = myapps.Tables[0].DefaultView;
            lb_apps.DataValueField = "app";
            lb_apps.DataBind();



private void appsauslesen(string HID)
    {
        string sqlstring = "SELECT * FROM t_apps WHERE HardwareID = '" + HID + "'";
        
        SqlDataAdapter da = new SqlDataAdapter(sqlstring, sqlcon1);
        
        try
        {
            sqlcon1.Open();
            da.Fill(myapps, "apps");
        }
        catch (SqlException Ex)
        {
            l_status.Text = Ex.Message.ToString();
        }

        finally
        {
            sqlcon1.Close();
        }
        
    }

MFG

F
10.010 Beiträge seit 2004
vor 17 Jahren

Und wann füllst Du das DS Global?

Du weisst, das in einer ASP.NET Anwendung Daten zwischen 2 Seitenaufrufen
nicht übertragen werden?
Die sind einfach weg.

King-Malkav Themenstarter:in
264 Beiträge seit 2006
vor 17 Jahren

Original von FZelle
Und wann füllst Du das DS Global?

Du weisst, das in einer ASP.NET Anwendung Daten zwischen 2 Seitenaufrufen
nicht übertragen werden?
Die sind einfach weg.

Ok, ich habe das Dataset nochmal neu füllen lassen und jetzt kann ich einen neuen Datensatz hinzufügen, allerdings ist dieser direkt weg nach dem nächsten postback.

Wie kann ich das Problem lösen? Ich möchte die Daten nicht direkt in die Datenbank schreiben.

MFG

3.728 Beiträge seit 2005
vor 17 Jahren
Sitzungsstatus

Du verwendest den Sitzungsstatus und speicherst die Sache da zwischen. Man sollte allerdings möglichst nicht statusbehaftet programmieren, da das den Webserver belastet. Schreibe niemals Tabellen mit hunderten oder tausenden von Datensätzen in den Sitzungsstatus.

King-Malkav Themenstarter:in
264 Beiträge seit 2006
vor 17 Jahren

Es sind max. 3-4 einträge pro Tabelle. Könnte ich es auch mit Cookies lösen oder ist das umständlich?

Wie schreib ich den Inhalt eines Datasets in die Session?

MFG

F
10.010 Beiträge seit 2004
vor 17 Jahren

Vielleicht solltest Du Dir das Programmiermodell von ASP.NET nochmal anschauen.

Und Session, Application und Cache werden in jeder einsteigerlektüre beschrieben.


Session["MeinDS"] = myapps;
...
if( Session.Contains("MeinDS") )
  myapps = (DataSet)Session["MeinDS"];

King-Malkav Themenstarter:in
264 Beiträge seit 2006
vor 17 Jahren

Original von FZelle
Vielleicht solltest Du Dir das Programmiermodell von ASP.NET nochmal anschauen.

Und Session, Application und Cache werden in jeder einsteigerlektüre beschrieben.

  
Session["MeinDS"] = myapps;  
...  
if( Session.Contains("MeinDS") )  
  myapps = (DataSet)Session["MeinDS"];  
  

Hi,

Session.Contains existiert nicht, Wie kann ich überprüfen ob ein Objekt in der Session existiert oder nicht?

Fehler	1	System.Web.SessionState.HttpSessionState enthält keine Definition für Contains.	c:\inetpub\wwwroot\BetsandBeta\details.aspx.cs	324	21	http://localhost/BetsandBeta/

F
10.010 Beiträge seit 2004
vor 17 Jahren

In die Doku schauen.

King-Malkav Themenstarter:in
264 Beiträge seit 2006
vor 17 Jahren

Original von FZelle
In die Doku schauen.

Danke für die Hilfreiche Antwort, aber diese glorreiche Idee hatte ich schon und ich hab nichts gefunden.

MFG

F
10.010 Beiträge seit 2004
vor 17 Jahren

Tja, dann schaust Du anscheinend in eine andere Hilfe als ich.


public DataSet MyDs
{
  get
  {
    if( Session["MyDs"] != null )
     return Session["MyDs"] as DataSet;
    return NeuesDsAnlegen();
  }
  set
  {
    Session["MyDs"] = value;
  }
}

Jetzt kannst Du innerhalb deiner Seite ganz normal drauf zugreifen.