这是一个简单的客户资源管理系统,三层架构设计,但我在填写完客户表单提交按钮时,却出错了:异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例.即无法添加客户!
页面层代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using crm.Components;
using System.Data.SqlClient;
using SQLHelper;namespace crm.DesktopModules.Client
{
public class AddOldClient : System.Web.UI.Page
{
.......................
..................
private void Page_Load(object sender, System.EventArgs e)
{
if(Session["UserID"]==null)
{
Response.Redirect("~/Default.aspx");
}
if(Components.User.IsAuthorityAdmin(Session["UserID"].ToString()) >= Components.User.USERTYPENORMAL)
{
Response.Write("<script>alert(\"你没有权限,请与管理员联系!\")</script>");
Response.Write("<script>history.back();</script>");
}
if(!Page.IsPostBack)
{
UpdateTime.Text=DateTime.Now.ToShortDateString();
}
} private void AddBtn_Click(object sender, System.EventArgs e)
{ if(Page.IsValid == true)
{
crm.Components.Old_Client old_client = new crm.Components.Old_Client();
try //这里调用数据访问层Old_Client.cs的AddClient()方法
{
old_client.AddClient(Int32.Parse(AreaList.SelectedValue),Int32.Parse(ClientTypeList.SelectedValue),Int32.Parse(ManagerList.SelectedValue),Int32.Parse(Visit_Intent_List.SelectedValue),Int32.Parse(Visit_Way_List.SelectedValue),Convert.ToDateTime(VisitTime.Text.Trim()),ClientName.Text.Trim(),Address.Text.Trim(),Man_Visited.Text.Trim(),Man_Visited_Position.Text.Trim(),Man_Visited_Tel.Text.Trim(),Now_State.Text.Trim(),Products.Text.Trim(),Use_State.Text.Trim(),Month_Complain_Handle.Text.Trim(),Int32.Parse(Client_Stability_List.SelectedValue),New_Demand.Text.Trim(),Competitor_Activity.Text.Trim(),Topic.Text.Trim(),Solution.Text.Trim(),Int32.Parse(Start_Flow_List.SelectedValue),Int32.Parse(After_Handle_Dep_List.SelectedValue),Result.Text.Trim(),Gift.Text.Trim(),Company.Text.Trim(),Int32.Parse(Grade_List.SelectedValue),Convert.ToDateTime(UpdateTime.Text.Trim()));
Response.Write("<script>window.alert('数据添加成功!')</script>");}
catch(Exception ex)
{
SystemError.SystemLog(ex.Message);
throw new Exception(ex.Message,ex);
}
} }
}
}数据访问层代码Old_Client.cs AddClient()方法的定义
public int AddClient(
int nAreaID ,
int nClientTypeID ,
int nManagerID ,
int nVisit_IntentID ,
int nVisit_WayID ,
DateTime dVisitTime ,
string sClientName ,
string sAddress ,
string sMan_Visited ,
string sMan_Visited_Position ,
string sMan_Visited_Tel ,
string sNow_State ,
string sProducts ,
string sUse_State ,
string sMonth_Complain_Handle ,
int nClient_StabilityID ,
string sNew_Demand ,
string sCompetitor_Activity ,
string sTopic ,
string sSolution ,
int nStart_FlowID ,
int nAfter_Handle_DepID ,
string sResult ,
string sGift ,
string sCompany,
int nGrade_ID,
DateTime dUpdateTime )
{
SQLHelper.SQLHelper sqlHelper = new SQLHelper.SQLHelper();
SqlParameter[] paramList = {
sqlHelper.CreateInParam("@AreaID",SqlDbType.Int,4,nAreaID),
sqlHelper.CreateInParam("@ClientType",SqlDbType.Int,4,nClientTypeID),
sqlHelper.CreateInParam("@ManagerID",SqlDbType.Int,4,nManagerID),
sqlHelper.CreateInParam("@Visit_IntentID",SqlDbType.Int,4,nVisit_IntentID),
sqlHelper.CreateInParam("@Visit_WayID",SqlDbType.Int,4,nVisit_WayID), sqlHelper.CreateInParam("@VisitTime",SqlDbType.DateTime,8,dVisitTime),
sqlHelper.CreateInParam("@ClientName",SqlDbType.VarChar,50,sClientName),
sqlHelper.CreateInParam("@Address",SqlDbType.VarChar,50,sAddress), sqlHelper.CreateInParam("@Man_Visited",SqlDbType.VarChar,50,sMan_Visited),
sqlHelper.CreateInParam("@Man_Visited_Position",SqlDbType.VarChar,50,sMan_Visited_Position),
sqlHelper.CreateInParam("@Man_Visited_Tel",SqlDbType.VarChar,50,sMan_Visited_Tel),
sqlHelper.CreateInParam("@Now_State",SqlDbType.VarChar,200,sNow_State),
sqlHelper.CreateInParam("@Products",SqlDbType.VarChar,200,sProducts),
sqlHelper.CreateInParam("@Use_State",SqlDbType.VarChar,200,sUse_State),
sqlHelper.CreateInParam("@Month_Complain_Handle",SqlDbType.VarChar,200,sMonth_Complain_Handle),
sqlHelper.CreateInParam("@Client_StabilityID",SqlDbType.Int,4,nClient_StabilityID),
sqlHelper.CreateInParam("@New_Demand",SqlDbType.VarChar,50,sNew_Demand),
sqlHelper.CreateInParam("@Competitor_Activity",SqlDbType.VarChar,50,sCompetitor_Activity),
sqlHelper.CreateInParam("@Topic",SqlDbType.VarChar,50,sTopic),
sqlHelper.CreateInParam("@Solution",SqlDbType.VarChar,50,sSolution),
sqlHelper.CreateInParam("@Start_FlowID",SqlDbType.Int,4, nStart_FlowID),
sqlHelper.CreateInParam("@After_Handle_DepID",SqlDbType.Int,4, nAfter_Handle_DepID),
sqlHelper.CreateInParam("@Result",SqlDbType.VarChar,50,sResult),
sqlHelper.CreateInParam("@Gift",SqlDbType.VarChar,50,sGift),
sqlHelper.CreateInParam("@Company",SqlDbType.VarChar,50,sCompany),
sqlHelper.CreateInParam("@Grade_ID",SqlDbType.Int,4,nGrade_ID),
sqlHelper.CreateInParam("@UpdateTime",SqlDbType.DateTime,8,dUpdateTime) };
try
{ //出错提示的地方在这里(但感觉未必就真是这里的错)
//调用存储过程(添加客户信息)
return(sqlHelper.RunProc("Pr_AddOld_Client",paramList));
}
catch(Exception ex)
{
SystemError.SystemLog(ex.Message);
throw new Exception(ex.Message,ex);
}
}类似的功能页面,我在AddNewClient.aspx都可以添加,奇怪
到底是什么原因呢?请各位高手,专家,大师帮忙分析一下吧,为了这个我快疯了,感激不尽呀!
(新手分数不多,给80分吧)
页面层代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using crm.Components;
using System.Data.SqlClient;
using SQLHelper;namespace crm.DesktopModules.Client
{
public class AddOldClient : System.Web.UI.Page
{
.......................
..................
private void Page_Load(object sender, System.EventArgs e)
{
if(Session["UserID"]==null)
{
Response.Redirect("~/Default.aspx");
}
if(Components.User.IsAuthorityAdmin(Session["UserID"].ToString()) >= Components.User.USERTYPENORMAL)
{
Response.Write("<script>alert(\"你没有权限,请与管理员联系!\")</script>");
Response.Write("<script>history.back();</script>");
}
if(!Page.IsPostBack)
{
UpdateTime.Text=DateTime.Now.ToShortDateString();
}
} private void AddBtn_Click(object sender, System.EventArgs e)
{ if(Page.IsValid == true)
{
crm.Components.Old_Client old_client = new crm.Components.Old_Client();
try //这里调用数据访问层Old_Client.cs的AddClient()方法
{
old_client.AddClient(Int32.Parse(AreaList.SelectedValue),Int32.Parse(ClientTypeList.SelectedValue),Int32.Parse(ManagerList.SelectedValue),Int32.Parse(Visit_Intent_List.SelectedValue),Int32.Parse(Visit_Way_List.SelectedValue),Convert.ToDateTime(VisitTime.Text.Trim()),ClientName.Text.Trim(),Address.Text.Trim(),Man_Visited.Text.Trim(),Man_Visited_Position.Text.Trim(),Man_Visited_Tel.Text.Trim(),Now_State.Text.Trim(),Products.Text.Trim(),Use_State.Text.Trim(),Month_Complain_Handle.Text.Trim(),Int32.Parse(Client_Stability_List.SelectedValue),New_Demand.Text.Trim(),Competitor_Activity.Text.Trim(),Topic.Text.Trim(),Solution.Text.Trim(),Int32.Parse(Start_Flow_List.SelectedValue),Int32.Parse(After_Handle_Dep_List.SelectedValue),Result.Text.Trim(),Gift.Text.Trim(),Company.Text.Trim(),Int32.Parse(Grade_List.SelectedValue),Convert.ToDateTime(UpdateTime.Text.Trim()));
Response.Write("<script>window.alert('数据添加成功!')</script>");}
catch(Exception ex)
{
SystemError.SystemLog(ex.Message);
throw new Exception(ex.Message,ex);
}
} }
}
}数据访问层代码Old_Client.cs AddClient()方法的定义
public int AddClient(
int nAreaID ,
int nClientTypeID ,
int nManagerID ,
int nVisit_IntentID ,
int nVisit_WayID ,
DateTime dVisitTime ,
string sClientName ,
string sAddress ,
string sMan_Visited ,
string sMan_Visited_Position ,
string sMan_Visited_Tel ,
string sNow_State ,
string sProducts ,
string sUse_State ,
string sMonth_Complain_Handle ,
int nClient_StabilityID ,
string sNew_Demand ,
string sCompetitor_Activity ,
string sTopic ,
string sSolution ,
int nStart_FlowID ,
int nAfter_Handle_DepID ,
string sResult ,
string sGift ,
string sCompany,
int nGrade_ID,
DateTime dUpdateTime )
{
SQLHelper.SQLHelper sqlHelper = new SQLHelper.SQLHelper();
SqlParameter[] paramList = {
sqlHelper.CreateInParam("@AreaID",SqlDbType.Int,4,nAreaID),
sqlHelper.CreateInParam("@ClientType",SqlDbType.Int,4,nClientTypeID),
sqlHelper.CreateInParam("@ManagerID",SqlDbType.Int,4,nManagerID),
sqlHelper.CreateInParam("@Visit_IntentID",SqlDbType.Int,4,nVisit_IntentID),
sqlHelper.CreateInParam("@Visit_WayID",SqlDbType.Int,4,nVisit_WayID), sqlHelper.CreateInParam("@VisitTime",SqlDbType.DateTime,8,dVisitTime),
sqlHelper.CreateInParam("@ClientName",SqlDbType.VarChar,50,sClientName),
sqlHelper.CreateInParam("@Address",SqlDbType.VarChar,50,sAddress), sqlHelper.CreateInParam("@Man_Visited",SqlDbType.VarChar,50,sMan_Visited),
sqlHelper.CreateInParam("@Man_Visited_Position",SqlDbType.VarChar,50,sMan_Visited_Position),
sqlHelper.CreateInParam("@Man_Visited_Tel",SqlDbType.VarChar,50,sMan_Visited_Tel),
sqlHelper.CreateInParam("@Now_State",SqlDbType.VarChar,200,sNow_State),
sqlHelper.CreateInParam("@Products",SqlDbType.VarChar,200,sProducts),
sqlHelper.CreateInParam("@Use_State",SqlDbType.VarChar,200,sUse_State),
sqlHelper.CreateInParam("@Month_Complain_Handle",SqlDbType.VarChar,200,sMonth_Complain_Handle),
sqlHelper.CreateInParam("@Client_StabilityID",SqlDbType.Int,4,nClient_StabilityID),
sqlHelper.CreateInParam("@New_Demand",SqlDbType.VarChar,50,sNew_Demand),
sqlHelper.CreateInParam("@Competitor_Activity",SqlDbType.VarChar,50,sCompetitor_Activity),
sqlHelper.CreateInParam("@Topic",SqlDbType.VarChar,50,sTopic),
sqlHelper.CreateInParam("@Solution",SqlDbType.VarChar,50,sSolution),
sqlHelper.CreateInParam("@Start_FlowID",SqlDbType.Int,4, nStart_FlowID),
sqlHelper.CreateInParam("@After_Handle_DepID",SqlDbType.Int,4, nAfter_Handle_DepID),
sqlHelper.CreateInParam("@Result",SqlDbType.VarChar,50,sResult),
sqlHelper.CreateInParam("@Gift",SqlDbType.VarChar,50,sGift),
sqlHelper.CreateInParam("@Company",SqlDbType.VarChar,50,sCompany),
sqlHelper.CreateInParam("@Grade_ID",SqlDbType.Int,4,nGrade_ID),
sqlHelper.CreateInParam("@UpdateTime",SqlDbType.DateTime,8,dUpdateTime) };
try
{ //出错提示的地方在这里(但感觉未必就真是这里的错)
//调用存储过程(添加客户信息)
return(sqlHelper.RunProc("Pr_AddOld_Client",paramList));
}
catch(Exception ex)
{
SystemError.SystemLog(ex.Message);
throw new Exception(ex.Message,ex);
}
}类似的功能页面,我在AddNewClient.aspx都可以添加,奇怪
到底是什么原因呢?请各位高手,专家,大师帮忙分析一下吧,为了这个我快疯了,感激不尽呀!
(新手分数不多,给80分吧)
解决方案 »
- 求帮助,webkit内核的浏览器
- 终于下定决心放弃学ASP.NET
- wpf 登录网页
- VS2008在跟踪程式码的时候有没有像Excel VBA那样...
- 求.net3.5(c#)写的项目源码
- dataGridView 创建行 未见对象引用到实例 在线等 急
- 急需----datetimepicker该控件怎么使用
- propertygrid控件属性问题
- 如何直接将一个长字符串直接载入XmlTextReader 或 XmlDocument ? 请教,请教,谢谢,谢谢!
- 请问:在程序中合成了sql语句,如何检查预先检查语法?
- 求高手帮我改段代码!!!!!!!!!!!!!!!!!!!!
- 一个小问题:一个整数如何变成 xxx,xxx,xxx样式的字符串?如 12345变成"12,345"
可能这句的写法有问题~
变革写法,将里面的东西给一个变量~ 然后返回变量式下
return(sqlHelper.RunProc("Pr_AddOld_Client",paramList));
可能这句的写法有问题~
变革写法,将里面的东西给一个变量~ 然后返回变量式下
--------------------------
对不起,忘了说了,
我的Pr_AddOld_Client存储过程已经包含了返回值 RETURN @@Identity,也许1\2楼的大侠说的有道理,可是我不知道怎么去调试 ,F9插断点,F11单步运行,监视窗口的信息是我在控件上填写的那些变量值,没错啊....惆怅!
Select @NewID = @@Identity后者主要查看参数的配置,以及各个db操作对象的初始化。
CREATE PROCEDURE Pr_AddOld_Client
(
@AreaID int,
@ClientTypeID int,
@ManagerID int,
@Visit_IntentID int,
@Visit_WayID int,
@VisitTime datetime,
@ClientName varchar(50),
@Address varchar(50),
@Man_Visited varchar(50),
@Man_Visited_Position varchar(50),
@Man_Visited_Tel varchar(50),
@Now_State varchar(200),
@Products varchar(200),
@Use_State varchar(200),
@Month_Complain_Handle varchar(200),
@Client_StabilityID int,
@New_Demand varchar(50),
@Competitor_Activity varchar(50),
@Topic varchar(50),
@Solution varchar(50),
@Start_FlowID int ,
@After_Handle_DepID int,
@Result varchar(50),
@Gift varchar(50) ,
@Company varchar(50),
@Grade_ID int,
@UpdateTime datetime
)
ASINSERT INTO
Old_Client
( AreaID ,
ClientTypeID ,
ManagerID ,
Visit_IntentID ,
Visit_WayID ,
VisitTime ,
ClientName ,
Address ,
Man_Visited ,
Man_Visited_Position ,
Man_Visited_Tel ,
Now_State ,
Products ,
Use_State ,
Month_Complain_Handle ,
Client_StabilityID ,
New_Demand ,
Competitor_Activity ,
Topic ,
Solution ,
Start_FlowID ,
After_Handle_DepID ,
Result ,
Gift ,
Company,
Grade_ID,
UpdateTime
)
VALUES
(
@AreaID ,
@ClientTypeID ,
@ManagerID ,
@Visit_IntentID ,
@Visit_WayID ,
@VisitTime ,
@ClientName ,
@Address ,
@Man_Visited ,
@Man_Visited_Position ,
@Man_Visited_Tel ,
@Now_State ,
@Products ,
@Use_State ,
@Month_Complain_Handle ,
@Client_StabilityID ,
@New_Demand ,
@Competitor_Activity,
@Topic ,
@Solution ,
@Start_FlowID ,
@After_Handle_DepID ,
@Result ,
@Gift ,
@Company,
@Grade_ID,
@UpdateTime
)
RETURN @@Identity //返回一个表自动递增的标识
GO
愚翁大侠,恳请看一下,这个错与存储过程有关么?
我不太习惯在存储中用返回值,如果要用返回值,你可以查查这方面的帮助如果是可以使用output参数,可以如下进行修改。
1.
//Stored Procedure
..
@UpdateTime datetime,
@NewID Int OUTPUT --Add new parameter2.
change
RETURN @@Identitywith
SELECT @NewID = @@Identity3.
//Add parameter in "paramList"
..
sqlHelper.CreateInParam("@UpdateTime",SqlDbType.DateTime,8,dUpdateTime),
sqlHelper.CreateInParam("@NewID",SqlDbType.Int )//Set its type
paramList[paramList.Length -1 ].Direction = ParameterDirection.Output;
INSERT INTO
Old_Client
( AreaID ,
ClientTypeID ,
ManagerID ,
Visit_IntentID ,
Visit_WayID ,
VisitTime ,
ClientName ,
Address ,
Man_Visited ,
Man_Visited_Position ,
Man_Visited_Tel ,
Now_State ,
Products ,
Use_State ,
Month_Complain_Handle ,
Client_StabilityID ,
New_Demand ,
Competitor_Activity ,
Topic ,
Solution ,
Start_FlowID ,
After_Handle_DepID ,
Result ,
Gift ,
Company,
Grade_ID,
UpdateTime
)
VALUES
(
1 ,
1 ,
1,
1 ,
1 ,
'2006-06-06' ,
'a' ,
' b' ,
' c',
' d',
'e' ,
'f' ,
' g ',
'h' ,
' i' ,
1 ,
'j' ,
' k',
'l' ,
' m ',
1 ,
1 ,
' o' ,
' p ' ,
'q',
1,
'2006-09-09'
)GO
那所谓对象没有初始化是什么意思呢?
是.aspx文件,
还是.aspx.cs文件