需要你的帮助,我正在关注创建SQL数据库的在线教程
http://www.homeandlearn.co.uk/csharp/csharp_s12p9.html
我已经按照提供给点的代码,但我已经反对一个错误,我继续得到对象引用是C#中对象实例的集合
visual studio正在标记的代码是
cb.DataAdapter.Update(ds.Tables[0]);
我不知道,错误意味着什么,通过读取错误它与空引用有关。任何人都可以告诉我错误是什么以及如何解决它。
这是我的班级档案(http://pastebin.com/38zW6Zk7):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EmployeeDatabse
{
class DatabaseConnection
{
private string sql_string;
private string strCon;
System.Data.SqlClient.SqlDataAdapter da_1;
public string sql
{
set { sql_string = value; }
}
public string connection_string
{
set { strCon = value; }
}
public System.Data.DataSet GetConnection
{
get { return MyDataSet(); }
}
public void UpdateDatabase(System.Data.DataSet ds)
{
System.Data.SqlClient.SqlCommandBuilder cb = new System.Data.SqlClient.SqlCommandBuilder(da_1);
cb.DataAdapter.Update(ds.Tables[0]);
}
private System.Data.DataSet MyDataSet()
{
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(strCon);
con.Open();
System.Data.SqlClient.SqlDataAdapter da_1 = new System.Data.SqlClient.SqlDataAdapter(sql_string, con);
System.Data.DataSet dat_set = new System.Data.DataSet();
da_1.Fill(dat_set, "Table_data_1");
con.Close();
return dat_set;
}
}
}
答案 0 :(得分:1)
这是C#中的常见异常,当您在空引用上使用点运算符时会发生这种情况。对您而言,这意味着cb
或ds
在执行该行代码时的值为null
。
我查看了你简要发布的教程,但实际上无法提供帮助,因为它本身没有代码,我没有时间拼凑所有的片段并说“哦,你从来没有初始化ds“但是,如果你发布了更新版本的代码(需要更多上下文,我需要查看cb和ds的声明位置/你设置这些值的任何地方)我可以给你一个更具体的解决方案。
有几种解决方法;第一个是完全阻止空值,第二个是添加无效检查,以防止引发异常。我个人建议同时进行这两项检查。首先,通过app跟踪这些变量的值,并确保通向该行的所有代码路径都会导致它们被设置,其次,您应该将一些逻辑包含在if if (thisReference != null) { thisReference.DoSomething }
形式的语句中
答案 1 :(得分:0)
检查数据集(ds)中是否有表。如果数据集没有任何表,则可能会出现该错误。
答案 2 :(得分:0)
NullReferenceException
(您得到的)意味着您尝试使用null
的引用类型执行某些操作。在你失败的代码行中,
cb.DataAdapter.Update(ds.Tables[0]);
其中任何一个都可能为null:
cb
DataAdapter
属性(cb.DataAdapter
)ds
ds.Tables[0]
(没有任何内容表明DataSet
必须包含任何表。或者事件o包含表集合。不要问我怎么知道这个:D)。如果没有看到背景(你如何使用你的班级),我们很难(不可能?)说出问题所在。
但是,你可以轻松解决调试程序中的问题。只需在失败的行上设置一个断点,并在遇到断点时检查事物的值。
或者,您可以使用断言来表达您的期望。在抛出异常的位置之前注入这些语句将为您确定问题:
Debug.Assert( cb != null , "cb is null" ) ;
Debug.Assert( cb.DataAdapter != null , "cb.DataAdapter is null" ) ;
Debug.Assert( ds != null , "ds is null" ) ;
Debug.Assert( ds.Tables !+ null , "ds.Tables is null" ) ;
Debug.Assert( ds.Tables.Count > 0 , "ds.Tables contains no tables" ) ;
答案 3 :(得分:0)
对象引用未设置为对象的实例
当您尝试调用实际为null
的变量的方法时,通常会发生这种情况。在尝试调用某种方法之前,请务必检查null
的变量。
请注意,您有一个永远不会初始化的名为da_1
的字段。您的MyDataSet
方法正在创建一个名为da_1
的局部变量,而不是使用类变量。然后在UpdateDatabase
上尝试创建一个未初始化的SqlCommandBuilder
传递da_1
。这可能是个问题。