Order类的声明:
=======================
public class OrderClass
{
public string Order;
public string Categoty;
public DateTime Date;
public DateTime Term;
}方法的调用过程:
=============================
private void btnNext_Click(object sender, System.EventArgs e)
{
OrderClass newOrder = new OrderClass();
newOrder.Order = TextBox1.Text;
newOrder.Categoty = DropDownList1.SelectedValue.ToString();
newOrder.Date = Convert.ToDateTime(TextBox2.Text);
newOrder.Term = Convert.ToDateTime(TextBox3.Text);
DataClass dc = new DataClass();
dc.AddOrder(newOrder);
}
=======================
public class OrderClass
{
public string Order;
public string Categoty;
public DateTime Date;
public DateTime Term;
}方法的调用过程:
=============================
private void btnNext_Click(object sender, System.EventArgs e)
{
OrderClass newOrder = new OrderClass();
newOrder.Order = TextBox1.Text;
newOrder.Categoty = DropDownList1.SelectedValue.ToString();
newOrder.Date = Convert.ToDateTime(TextBox2.Text);
newOrder.Term = Convert.ToDateTime(TextBox3.Text);
DataClass dc = new DataClass();
dc.AddOrder(newOrder);
}
=============================
我真的烦死了,还是找不到问题在哪里。请各位帮我看看吧!public DataSet GetSelectData(string SelectText)
{
Adapter = new SqlDataAdapter(SelectText,Conn);
try
{
Conn.Open();
Adapter.Fill(ds);
return ds;//返回数据表;
}
catch //保证即使数据库读取失败都能返回DS数据集;
{
return ds;
}
finally//最后关闭数据库连接;
{
Conn.Close();
}
}
System.NullReferenceException: 未将对象引用设置到对象的实例。 at Logistics.DataClass.AddOrder(OrderClass newOrder) in 那么怎样才能够实现用自定义的类作为参数传递呢?
我这样做有问题吗?
你应该检查DataClass 这个类啊!
{
//提交数据;
//Conn.Open();
Adapter = new SqlDataAdapter();
Adapter.SelectCommand.CommandText = "Select * From Order";
Adapter.SelectCommand.Connection =Conn;
SqlCommandBuilder cb = new SqlCommandBuilder(Adapter);
Conn.Open();
ds = this.GetSelectData("Select * From Order");
DataRow dr = ds.Tables["Order"].NewRow();
dr["Order"] = newOrder.Order;
dr["Category"] = newOrder.Categoty;
dr["Date"] = newOrder.Date;
dr["Term"] = newOrder.Term;
ds.Tables["Order"].Rows.Add(dr);
Adapter.Update(ds,"Order");
}
Adaptert和ds 的声明和初始化都在构造函数中完成的
SqlConnection Conn=new sqlConnection();
SqlDataAdapter Adapter = new SqlDataAdapter(SelectText,Conn);
DataSet ds=new DataSet();
try
{
Adapter.Fill(ds);
return ds;//返回数据表;
}
catch //保证即使数据库读取失败都能返回DS数据集;
{
return ds;
}
另外这种错误就像楼上的所说的单步调试一下,因为你是空引用问题比较容易找,有问题发短信给我。
Logistics.DataClass.AddOrder(OrderClass newOrder) in 58行。
但是我不知道等于那一行,他的代码编辑器中不像Delphi8那样带标识 啊。
我以前用C#写App应用程序时都没问题,珍奇怪。
Logistics.DataClass.AddOrder(OrderClass newOrder) in 58行。
但是我不知道等于那一行,他的代码编辑器中不像Delphi8那样带标识 啊。状态栏右下显示的是光标所在的行列,也可以在工具-->选项里面设置显示行
你是这样定义的:
DataClass dc = new DataClass();
dc.AddOrder(newOrder);
而实际上的方法定义是这样的:
public void AddOrder(OrderClass newOrder);这只是个提交数据到数据库的壳(也就是方法)
具体的连接web页面实现本质数据传输还是由最上面两句完成的。
那么关键点集中在DataClass这个类,这个类定义的dc到底是个什么样的类对象,它是否真的能存数据,从而完成AddOrder(),这是你要着重考虑的问题。如果dc只是个实例化方法的话,显然会出错,因为没有数据的承载,那么谈何完成提交到数据库的AddOrder()这个方法呢?
:
加一个判断语句:
if (ds.tables["Order"]!=null)
{
do...
}
传递到DataClass的AddOrder(OrderClass newOrder);的方法中。
这样是不是有问题?
是不是WebForm中不可以将数据这样传递?按照楼上的师傅所说的意思是说我的
OrderClass newOrder = new OrderClass();
newOrder.Order = TextBox1.Text;
newOrder.Categoty = DropDownList1.SelectedValue.ToString();
newOrder.Date = Convert.ToDateTime(TextBox2.Text);
newOrder.Term = Convert.ToDateTime(TextBox3.Text);
DataClass dc = new DataClass();
dc.AddOrder(newOrder);
实际上AddOrder方法所接受到的参数是null[空值]????
DataClass应该是这个
DataClass应该是这个
肯定是你的哪一个对象是空的,特别注意一下string型数据
自己慢慢找找
ds = GetSelectData("Select * From Order");
的过程中,没有返回数据集。
就是不知道是什么原因?
现在我已经将该方法改为这样,还是不行。public DataSet GetSelectData(string SelectText)
{
Conn = new SqlConnection(ConnText);
Adapter = new SqlDataAdapter(SelectText,Conn);
try
{
Conn.Open();
Adapter.Fill(ds);
return ds;//返回数据表;
}
catch //保证即使数据库读取失败都能返回DS数据集;
{
return ds;
}
finally//最后关闭数据库连接;
{
Conn.Close();
}
}
//newOrder.Categoty = DropDownList1.SelectedValue.ToString();
改成这样试试
if(DropDownList1.SelectedValue!=null)
{
newOrder.Categoty = DropDownList1.SelectedValue.ToString();
}
using System;
using System.Data;
using System.Data.SqlClient;namespace Logistics
{ /// <summary>
/// 自定义Orderclass类,处理订单数据;
/// </summary>
public class OrderClass
{
public string Order;
public string Categoty;
public DateTime Date;
public DateTime Term;
}
/// <summary>
/// 添加DataClass数据管理专用类用以处理后台数据库。
/// </summary>
public class DataClass
{
private SqlConnection Conn;
//private SqlCommandBuilder Commb;
//private DataSet ds;//这里的DataSet用的不好
private SqlDataAdapter Adapter;
private string ConnText = "Server=localhost;Uid=sa;Pwd=;DataBase=Logistics";
public DataClass()
{
Conn = new SqlConnection(ConnText);
//Commb= new SqlCommandBuilder();
//ds = new DataSet();
Adapter = new SqlDataAdapter();
}
//手工添加根据SQL语句参数,提供相应数据的方法;
public DataSet GetSelectData(string SelectText)
{
//既然已经在构造函数中实例化了为什么还在这里重新实例化一个
//Adapter = new SqlDataAdapter(SelectText,Conn);
//修改
Adapter.SelectCommand.Connection = Conn;
Adapter.SelectCommand.CommandText = SelectText;
try
{ DataSet ds =new DataSet();
//既然只填充一次就让Adapter自己管理连接吧,Adapter会自己管理连接
//Conn.Open();
Adapter.Fill(ds,"Order");
return ds;//返回数据表;
}
catch //保证即使数据库读取失败都能返回DS数据集;
{
return null;
}
//finally//最后关闭数据库连接;
//{
// Conn.Close();
//}
}
public void AddOrder(OrderClass Order)
{
//提交数据;
Adapter.SelectCommand.CommandText = "Select * From Order";
Adapter.SelectCommand.Connection =Conn;
SqlCommandBuilder cb = new SqlCommandBuilder(Adapter);
//Conn.Open(); DataSet ds = this.GetSelectData("Select * From Order");
//ds = new DataSet();
//Adapter.Fill(ds);
DataRow dr = ds.Tables["Order"].NewRow();
dr["Order"] = Order.Order;
dr["Category"] = Order.Categoty;
dr["Date"] = Order.Date;
dr["Term"] = Order.Term;
ds.Tables["Order"].Rows.Add(dr); Adapter.Update(ds,"Order");
}
}
}
但是我想将GetSelectData方法该的通用一点。
后来我将他该为这样:但是没有正常返回指定数据表名字的
数据集,麻烦你好人作到底帮小弟看看为什么回不行吗?public DataSet GetSelectData(string SelectText,string TableName)
{
//我添加了这个TableName变量后就不行不知道为什么?,
Adapter.SelectCommand.Connection = Conn;
Adapter.SelectCommand.CommandText = SelectText;
try
{ DataSet ds =new DataSet();
Adapter.Fill(ds,TableName);
return ds;//返回数据表;
}
catch //保证即使数据库读取失败都能返回DS数据集;
{
return null;
}
}调用时,我是这样调用的:
=======================
DataSet ds = new DataSet();
ds = GetSelectData("Select * From Order","Order");
//接下来如果要访问这个ds变量时就会提示“未将对象引用设置到对象实例”
catch //保证即使数据库读取失败都能返回DS数据集;
{
return null;
}
=========================写成
catch(Exception ex)
{
ex.ToString();//在这里设置断点,看看错误提示是什么,从你的说明来看是有异常了,
return null;
}
=======================
DataSet ds = new DataSet();
ds = GetSelectData("Select * From Order","Order");
修改成
//不需要再重新实例化ds 了。
DataSet ds = GetSelectData("Select * From Order","Order");
if(ds == null)
那就是获取出错。