似乎无法修复c#中对象的null情况(对象引用未设置为对象的实例)
本文关键字:对象 对象引用 设置 实例 情况 null | 更新日期: 2023-09-27 18:10:25
我的DataTable对象似乎是空的,但我不明白为什么。我试着给它加三个变量,但它还是说它是空的。下面是我的代码:
DataTable dt;
DataSet ds = new DataSet();
private void InitDataTable()
{
if (!File.Exists("gjesteInfo.xml"))
{
dt = new DataTable("Gjester");
ds.ReadXml("gjesteInfo.xml");
ds.Tables.Add(dt);
DataColumn dc1 = new DataColumn("Fullt navn");
DataColumn dc2 = new DataColumn("Start dato");
DataColumn dc3 = new DataColumn("Antall dager");
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
ds.Merge(dt);
ds.WriteXml("gjesteInfo.xml");
}
else
{
dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
ds.Merge(dt); <- This is where I want to add information to the dataTable, and this is where the error shows up.
ds.WriteXml("gjesteInfo.xml");
}
}
有什么建议如何避免著名的"对象引用不设置为对象的实例"错误?
在if语句的else部分,DataTable没有初始化
但主要的问题是,如果文件不存在你不能尝试读取它.....
if(!File.Exists("gjesteInfo.xml"))
{
// The file doesn't exist, create the table to receive initial data here
dt = new DataTable("Gjester");
DataColumn dc1 = new DataColumn("Fullt navn");
DataColumn dc2 = new DataColumn("Start dato");
DataColumn dc3 = new DataColumn("Antall dager");
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
ds.Tables.Add(dt);
}
else
{
// The file exist, read the data and use the first table in the dataset to add new info
ds.ReadXml("gjesteInfo.xml");
dt = ds.Tables[0];
dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
}
ds.Merge(dt);
ds.WriteXml("gjesteInfo.xml");
EDIT查看您下面的评论,似乎您的文本框包含了之前输入的所有数据。如果是这种情况,那么xml文件需要从头开始重写
if(File.Exists("gjesteInfo.xml"))
File.Delete("gjesteInfo.xml")
dt = new DataTable("Gjester");
DataColumn dc1 = new DataColumn("Fullt navn");
DataColumn dc2 = new DataColumn("Start dato");
DataColumn dc3 = new DataColumn("Antall dager");
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
ds.Tables.Add(dt);
ds.Merge(dt);
ds.WriteXml("gjesteInfo.xml");
如果您遇到else
部分-您从未创建dt
数据表对象!您只能在if
块....中实例化它您需要在 if
语句之前有dt = new DataTable()
调用,以便它对两种情况都有效....
DataTable dt;
DataSet ds = new DataSet();
private void InitDataTable()
{
dt = new DataTable("Gjester"); <<=== this **BEFORE** the if!
if (!File.Exists("gjesteInfo.xml"))
{
.......
}
else
{
// now, in this case, "dt" has been created, and **NOW** you can operate on it!
dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
ds.Merge(dt);
ds.WriteXml("gjesteInfo.xml");
}
应该是:
else
{
dt = new DataTable("Gjester");
dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
ds.Merge(dt);
ds.WriteXml("gjesteInfo.xml");
}