急 System.NullReferenceException: 未将对象引用设置到对象的实例。

Yzak0Jule 2010-12-22 05:11:42
错误详细:

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:


行 13: {
行 14: MessageInterface iMsg = MessageFactory.Create();

行 15: return iMsg.AddMessage(message);

行 16: }
行 17: }


源文件: F:\GameDesign\Bussiness\MessageBusiness.cs 行: 15


运行页面后台代码:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.IO;
using GD.Model;
using GD.DataAccess;
using GD.SystemFrameworks;
using GD.Bussiness.Message;

public partial class AddMsg : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["fld_UserName"] == null)
{
this.Response.Write(" <script language=javascript>alert('留言成功');window.window.location.href='Login.aspx';</script> ");
Response.Redirect("Login.aspx?message=" + Server.UrlEncode("请登录后再留言!"));
}
//if (!CommonClass.hasSession(Page.Session))
// Response.Redirect("Login.aspx?message=" + Server.UrlEncode("请登录后再留言!"));
}

protected void btnOK_Click(object sender, EventArgs e)
{

Message message = new Message();
message.fld_UserId = Convert.ToInt32(Label1.Text);
message.fld_Title = txtTitle.Text;
message.fld_Content = txtDSC.Text;
message.fld_CreatedTime = Convert.ToDateTime(DateTime.Now);

MessageBusiness messageBusiness = new MessageBusiness();
if (messageBusiness.AddMessage(message))
{
Utility.AlertMsg(this.Page, "成功");
}
else
{
Utility.AlertMsg(this.Page, "失败");
}
}
}


业务层代码:

namespace GD.Bussiness.Message
{
using System;
using System.Data;
using System.Collections.Generic;
using System.Text;
using GD.Model;
using GD.DataAccess.Message;

public class MessageBusiness
{
public bool AddMessage(Message message)
{
MessageInterface iMsg = MessageFactory.Create();
return iMsg.AddMessage(message);
}
}
}


数据处理代码:

namespace GD.DataAccess.Message
{
using System;
using System.Data;
using System.Data.SqlClient;

using GD.Model;
using GD.SystemFrameworks;
using GD.DataAccess.SystemFrame;

public class MessageSqlHandle : MessageInterface
{
public bool AddMessage(Message message)
{
SQLHelper helper = new SQLHelper();
SqlParameter[] prams = {
new SqlParameter("@fld_UserId",SqlDbType.Int,8),
new SqlParameter("@fld_Title",SqlDbType.NVarChar,50),
new SqlParameter("@fld_Content",SqlDbType.NVarChar),
new SqlParameter("@fld_CreatedTime",SqlDbType.DateTime,8)
};
prams[0].Value = message.fld_UserId;
prams[1].Value = message.fld_Title;
prams[2].Value = message.fld_Content;
prams[3].Value = message.fld_CreatedTime;

int i;
i = helper.ExecuteNonQuery("Tb_AddMessage", prams);
if (i == 0)
return true;
else
return false;
}
}
}

存储过程:

ALTER PROCEDURE dbo.Tb_AddMessage
(
@fld_UserId int,
@fld_Title nvarchar(100),
@fld_Content nvarchar(max),
@fld_CreatedTime datetime,
@fld_Clicks int
)
AS
BEGIN
BEGIN TRY
INSERT INTO Tb_Message(
fld_UserId,
fld_Title,
fld_Content,
fld_CreatedTime,
fld_Clicks
)VALUES(
@fld_UserId,
@fld_Title,
@fld_Content,
@fld_CreatedTime,
@fld_Clicks
)

RETURN 0
END TRY
BEGIN CATCH
RETURN ERROR_NUMBER()
END CATCH

END


工厂反射模式 的程序 折腾了一下午了 始终解决不了 急啊~~~
...全文
1445 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yzak0Jule 2010-12-22
  • 打赏
  • 举报
回复
还有,为什么我在用户登陆的时候取不到用户的ID 但可以登陆
用户登陆处理的

public bool UserLogin(User user)
{

SQLHelper helper = new SQLHelper();


SqlParameter[] pram = {
new SqlParameter("@fld_UserId",SqlDbType.Int,8),
new SqlParameter("@fld_UserName",SqlDbType.NVarChar,50),
new SqlParameter("@fld_Password",SqlDbType.NVarChar,50)
};
pram[0].Value = user.fld_UserId;
pram[1].Value = user.fld_UserName;
pram[2].Value = user.fld_Password;

int i;
i = helper.ExecuteNonQuery("Tb_UserSelect", pram);
if (i == 0)
return true;
else
return false;
}


存储过程:

ALTER PROCEDURE dbo.Tb_UserSelect
(
@fld_UserId int,
@fld_UserName nvarchar(50),
@fld_Password nvarchar(50)
)
AS
BEGIN
BEGIN TRY

SELECT * FROM Tb_User WHERE fld_UserName = @fld_UserName AND fld_Password = @fld_Password

RETURN 0
END TRY
BEGIN CATCH
RETURN ERROR_NUMBER()
END CATCH

END

TimZhuFaith 2010-12-22
  • 打赏
  • 举报
回复
你可以在登录页面输出看看你session赋值有没有成功。。。
辉之不趣 2010-12-22
  • 打赏
  • 举报
回复
Session 需要 Asp.net 服务 的支持,要在该服务启动的情况下,才支持会话状态
  • 打赏
  • 举报
回复
MessageFactory.Create()为空
guoyanhong1111 2010-12-22
  • 打赏
  • 举报
回复
MessageFactory.Create()没有获得一个实例,那么你去调用.AddMessage(message);就会未将对象实例化
AccessZHB 2010-12-22
  • 打赏
  • 举报
回复
要么没有实例化要么就是给对象赋空值了
Yzak0Jule 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wangchangming 的回复:]

public static IProduct CreateProduct()
{
string className = path + ".Product";
return (IProduct)Assembly.Load(path).CreateInstance(className);
}
注意Assmbl……
[/Quote]
提醒我了,解决了
我把工厂里 的 path去掉了,就可以了

namespace GD.DataAccess.Message
{
using System;
using System.Reflection;
using GD.SystemFrameworks;

public sealed class MessageFactory
{
private MessageFactory() { }

public static MessageInterface Create()
{
string path = GDConfiguration.DataAccess;

string ClassName = path + "GD.DataAccess.Message.MessageSqlHandle";

return (MessageInterface)Assembly.Load(path).CreateInstance(ClassName);
}
}
}


namespace GD.DataAccess.Message
{
using System;
using System.Reflection;
using GD.SystemFrameworks;

public sealed class MessageFactory
{
private MessageFactory() { }

public static MessageInterface Create()
{
string path = GDConfiguration.DataAccess;

string ClassName = "GD.DataAccess.Message.MessageSqlHandle";

return (MessageInterface)Assembly.Load(path).CreateInstance(ClassName);
}
}
}

但我不明白为什么
还有
我在登陆页面将fld_UserId存在session里 为什么在添加页面取不到 fld_UserId

if (userBusiness.UserLogin(user))
{
Session["fld_UserId"] = user.fld_UserId;
this.Response.Write(" <script language=javascript>alert('登陆成功');window.window.location.href='AddMsg.aspx';</script> ");
}
else
{
lblAlert.Text = "<script>alert('登录失败!')</script>";
}


message.fld_UserId = Convert.ToInt32(Session["fld_UserId"]);

Issac25Name 2010-12-22
  • 打赏
  • 举报
回复
楼主:这样的问题完全可以自己解决,调试一下看看!出现这样问题你要有第一反应就是和当前对象有关程序返回信息或相关参数为null值。按照这个思想可以去调试就应该可以找到问题了!!!!

希望对你有所帮助
yujian1018 2010-12-22
  • 打赏
  • 举报
回复
这是.NET滴????
TimZhuFaith 2010-12-22
  • 打赏
  • 举报
回复
把你的工厂代码贴出来。。
yangxueke 2010-12-22
  • 打赏
  • 举报
回复
运行完 MessageInterface iMsg = MessageFactory.Create();这句, 鼠标放在iMsg上右键选择【快速监视】看下 iMsg 是否为NULL
wangchangming 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yzak0jule 的回复:]

引用 3 楼 foren_whb 的回复:

也就是说你传进来的message是空值,
断点调试下吧,
很容易解决的问题


我断点了
调试到最后的错误时

return iMsg.AddMessage(message);这句

Message "未将对象引用设置到对象的实例。" string

用户代码未处理 NullReferenceException 未将对象引……
[/Quote]
确实是你iMsg为Null;
wangchangming 2010-12-22
  • 打赏
  • 举报
回复
public static IProduct CreateProduct()
{
string className = path + ".Product";
return (IProduct)Assembly.Load(path).CreateInstance(className);
}
注意Assmbly.Load().CreateInstance()的参数,应该是这里的问题
Yzak0Jule 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 foren_whb 的回复:]

也就是说你传进来的message是空值,
断点调试下吧,
很容易解决的问题
[/Quote]

我断点了
调试到最后的错误时

return iMsg.AddMessage(message);这句

Message "未将对象引用设置到对象的实例。" string

用户代码未处理 NullReferenceException 未将对象引用设置到对象的实例

但我有赋值啊,传的message 没道理会是空的啊

protected void btnOK_Click(object sender, EventArgs e)
{

Message message = new Message();
message.fld_UserId = Convert.ToInt32(Label1.Text);
message.fld_Title = txtTitle.Text;
message.fld_Content = txtDSC.Text;
message.fld_CreatedTime = Convert.ToDateTime(DateTime.Now);

MessageBusiness messageBusiness = new MessageBusiness();
if (messageBusiness.AddMessage(message))
{
Utility.AlertMsg(this.Page, "成功");
}
else
{
Utility.AlertMsg(this.Page, "失败");
}
}

每个控件都有赋值,怎么传就传空的了呢
wangchangming 2010-12-22
  • 打赏
  • 举报
回复
iMsg为Null;
丰云 2010-12-22
  • 打赏
  • 举报
回复
也就是说你传进来的message是空值,
断点调试下吧,
很容易解决的问题
yangxueke 2010-12-22
  • 打赏
  • 举报
回复
MessageFactory.Create() 这里有可能返回null吗?
丰云 2010-12-22
  • 打赏
  • 举报
回复
message没有实例化

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧