Brett vorm Kopf, brauche Hilfe...

19/10/2010 - 14:36 von Siebert Kunze | Report spam
Grüße in die Runde,

ich überarbeite gerade laufenden Code einer kleinen Anwendung (vernünftige
Klassen bilden/ auslagern, Kommentieren, etc.)
Jetzt stolper ich über folgendes kleines Problem (ein nicht instantziertes
Objekt) und verbringe den ganzen Morgen mit der Fehlersuche :-(
Ich bin mir sicher, dass ich den Wald vor lauter Bàumen nicht sehe, falls
also jemand mal drüber schauen würde...
Ich bin leider nicht sehr geübt in der OOP und es ist mein erstes C#
Projekt.

Aus der Klasse ExcelHandling soll Code in ExcelFileParser wandern, um statt
lauter DataTable eine zentrale Klasse für ein DataSet zu schaffen.
Soll heißen, ExcelHandling wurde bisher in Form1 für jedes Sheet einzeln
aufgerufen.
Ich habe die relevanten Code-Stellen mal zusammengesucht:

//alles im selben namespace

// from Form1.cs - Form1_Load
// Fehler: Objektverweis nicht auf eine Objektinstanz festgelegt
(Null)
try
{
ExcelFileParser ds = new ExcelFileParser();
MessageBox.Show(ds.Tables["festeTermine"].ToString()); //
testhalber eingefügt, hier knallt es jetzt!
foreach (DataRow row in ds.Tables["festeTermine"].Rows) //
hier ist der Fehler aufgefallen, da knallte es ursprünglich!
[...]

// vorher: so làuft es...
try
{
DataTable t = new DataTable();
t = ExcelHandling.getDataTable("Termine");
MessageBox.Show(t.ToString()); // for testing purpose - hier
knallt nichts!
foreach (DataRow row in t.Rows) // làuft
[...]

// neue Klasse, soll das Dataset liefern
// from ExcelFileParser.cs
class ExcelFileParser : DataSet
{
[...]
public ExcelFileParser()
{
//ExcelFileParser = new DataSet(ExcelFile.Name);
this.DataSetName = ExcelFile.Name;
this.Tables.Add(getDataTable("Termine"));
}

private System.Data.DataTable getDataTable(string sheetName) // Rest
ist Copy&Paste ~ identisch mit dem funktionierenden Pandant
{
System.Data.DataTable dataTable = new System.Data.DataTable();
if (ExcelFile.Exists)
{ // es folgt ein großer try-block, die
Exception wird hier nicht ausgelöst!
[...]

// alte Klasse - funktioniert...
// from ExcelHandling.cs
class ExcelHandling
{
public static FileInfo ExcelFile
{ get { return new
FileInfo(Path.Combine(System.Windows.Forms.Application.StartupPath,
"database.xlsx")); } }

public static System.Data.DataTable getDataTable(string sheetName)
{
System.Data.DataTable dataTable = new System.Data.DataTable();
if (ExcelFile.Exists)
{
[...]

Danke an alle die sich 'nen Kopf machen,

Gruß, Siebert.
 

Lesen sie die antworten

#1 Siebert Kunze
19/10/2010 - 16:41 | Warnen spam
Problem solved.

// at
foreach (DataRow row in ds.Tables["festeTermine"].Rows)
// sheetName could not be resolved

// in
private System.Data.DataTable getDataTable(string sheetName) //<- sheetName
was missing

foreach (DataRow row in ds.Tables[0].Rows) // would have worked


"Siebert Kunze" schrieb im Newsbeitrag
news:i9k3d4$e74$03$
Grüße in die Runde,

ich überarbeite gerade laufenden Code einer kleinen Anwendung (vernünftige
Klassen bilden/ auslagern, Kommentieren, etc.)
Jetzt stolper ich über folgendes kleines Problem (ein nicht instantziertes
Objekt) und verbringe den ganzen Morgen mit der Fehlersuche :-(
Ich bin mir sicher, dass ich den Wald vor lauter Bàumen nicht sehe, falls
also jemand mal drüber schauen würde...
Ich bin leider nicht sehr geübt in der OOP und es ist mein erstes C#
Projekt.

Aus der Klasse ExcelHandling soll Code in ExcelFileParser wandern, um
statt lauter DataTable eine zentrale Klasse für ein DataSet zu schaffen.
Soll heißen, ExcelHandling wurde bisher in Form1 für jedes Sheet einzeln
aufgerufen.
Ich habe die relevanten Code-Stellen mal zusammengesucht:

//alles im selben namespace

// from Form1.cs - Form1_Load
// Fehler: Objektverweis nicht auf eine Objektinstanz
festgelegt (Null)
try
{
ExcelFileParser ds = new ExcelFileParser();
MessageBox.Show(ds.Tables["festeTermine"].ToString()); //
testhalber eingefügt, hier knallt es jetzt!
foreach (DataRow row in ds.Tables["festeTermine"].Rows) //
hier ist der Fehler aufgefallen, da knallte es ursprünglich!
[...]

// vorher: so làuft es...
try
{
DataTable t = new DataTable();
t = ExcelHandling.getDataTable("Termine");
MessageBox.Show(t.ToString()); // for testing purpose -
hier knallt nichts!
foreach (DataRow row in t.Rows) // làuft
[...]

// neue Klasse, soll das Dataset liefern
// from ExcelFileParser.cs
class ExcelFileParser : DataSet
{
[...]
public ExcelFileParser()
{
//ExcelFileParser = new DataSet(ExcelFile.Name);
this.DataSetName = ExcelFile.Name;
this.Tables.Add(getDataTable("Termine"));
}

private System.Data.DataTable getDataTable(string sheetName) //
Rest ist Copy&Paste ~ identisch mit dem funktionierenden Pandant
{
System.Data.DataTable dataTable = new System.Data.DataTable();
if (ExcelFile.Exists)
{ // es folgt ein großer try-block, die
Exception wird hier nicht ausgelöst!
[...]

// alte Klasse - funktioniert...
// from ExcelHandling.cs
class ExcelHandling
{
public static FileInfo ExcelFile
{ get { return new
FileInfo(Path.Combine(System.Windows.Forms.Application.StartupPath,
"database.xlsx")); } }

public static System.Data.DataTable getDataTable(string sheetName)
{
System.Data.DataTable dataTable = new System.Data.DataTable();
if (ExcelFile.Exists)
{
[...]

Danke an alle die sich 'nen Kopf machen,

Gruß, Siebert.

Ähnliche fragen