一个小登录页面,提示错误为“未将对象引用设置到对象的实例”
错误提示:未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
源错误:
行 14: {
行 15: string username=Request.Form["username"].ToString();
行 16: string password=Request.Form["password"].ToString();
行 17:
行 18: SqlConnection conn = new SqlConnection("server=192.168.1.8;database=news;uid=sa;pwd=suncheng;");
CS文件代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
namespace manage
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string username=Request.Form["username"].ToString();
string password=Request.Form["password"].ToString();
SqlConnection conn = new SqlConnection("server=192.168.1.8;database=news;uid=sa;pwd=suncheng;");
conn.Open();
SqlCommand cmd=new SqlCommand("select count(*) from admin where admin='"+username+"' and password='"+password+"'",conn);
int count = Convert.ToInt32(cmd.ExecuteScalar());
if (count > 0)
{
Response.Redirect("home.aspx");
}
else
{
Response.Redirect("index.aspx");
}
}
}
}
ASPX文件代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="manage.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<div>
<form name="index" method="post" action="index.aspx">
用户名:<input type="text" id="username" name="username" /><br />
密码:<input type="password" id="password name="password" /><br />
<input type="submit" value="提交" />
</form>
</div>
</form>
</body>
</html>
--------------------编程问答-------------------- id="password name="password"
写错了
应该是
id="password" name="password" --------------------编程问答-------------------- --------------------编程问答--------------------
?有没不同吗?抱歉我没看出来。 --------------------编程问答-------------------- 在C# code中
SqlConnection 没有关闭,你关闭就好了conn.close --------------------编程问答--------------------
有很大的不同啊! id="password name="password" 明显的语法错误! --------------------编程问答--------------------
我修改过来了,可还是不行。打开页面就报错。 --------------------编程问答-------------------- string username=Request.Form["username"].ToString();
string password=Request.Form["password"].ToString();
使用之前先判断
if (Request.Form["username"]!=null&&Request.Form["password"]!=null)
{
string username=Request.Form["username"].ToString();
string password=Request.Form["password"].ToString();
} --------------------编程问答-------------------- 你页面一加载,就直接取值,肯定会报没有设置到对象这种错,你应该先做判断
if( Request.Form["username"] != null && Request.Form["password"] != null )
{
//把你page_load里面的操作放到这里面
}
--------------------编程问答-------------------- 你确定你SQL语句没毛病么 --------------------编程问答-------------------- lz只问错误提示的内容.SQL注入就以后再弄吧.哈哈 --------------------编程问答--------------------
是啊,的确佩服1楼的火眼金睛,那么大个引号LZ竟然还没看到,在IDE中,肯定给你划上线了 --------------------编程问答-------------------- 太容易被注入了,用SqlParameter吧 --------------------编程问答-------------------- 遇到 “未将对象引用设置到对象的实例” 这个问题的时候。。。。
99.9% 是因为 你引用对象的错误。。
例如。。。。System.Data.Dataset mydataset=new DataSet();
string MyName=mydataset.Tables[2].Rows[0][0].ToString();
引用了没有事例的东西。。就会出现这个错误。。
--------------------编程问答-------------------- 谢谢大家的回复,我又新建了个login.htm aciton=index.aspx
输入用户名和密码后,还是会出错。但这次是在request的时候出错的
行 14: {
行 15: string username = Request.Form["username"].ToString();
行 16: string password = Request.Form["password"].ToString();
行 17:
行 18: SqlConnection conn = new SqlConnection("server=192.168.1.8;database=news;uid=sa;pwd=suncheng;");
--------------------编程问答-------------------- Request.Form["password"]为null
null.ToString()?不出异常才怪。 --------------------编程问答-------------------- 谢谢大家,问题解决了,我是模仿北大青鸟 吉林大学的aspx.net课程来学习的。
一开始我用index.aspx action到本页面,但没有判断非空,于是我新建了个login.htm action到index.aspx文件,现在问题已经解决了。谢谢大家的帮助。
不过判断非空那里我还没不是太懂,还要再琢磨一下。 --------------------编程问答-------------------- Request.QueryString["username"].ToString()==""?""Request.QueryString["username"].ToString() --------------------编程问答-------------------- string username=Request.Form["username"].ToString();
string password=Request.Form["password"].ToString();
因为没有收到请求的参数,所以会出错,
你在调试的时候,要从另一个页面跳过来才会有这个参数
补充:.NET技术 , ASP.NET