关于VS2010中asp.net后台代码中一个报错,不知道什么意思

报的错是这个:
图片说明
图片说明

然后我的后台代码是如下,起初没有任何错误提示,但是按下F11调试后就出现上面的错误了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Web.UI.DataVisualization.Charting;

namespace zhu
{
public partial class WebForm1 : System.Web.UI.Page
{
private SqlConnection SqlConnString;

    string[] Count1 = new string[9];
    double[] Count2 = new double[9];
    //string[] Count3 = new string[11];
    protected void Page_Load(object sender, EventArgs e)
    {

        DataSet ds = new DataSet();
        string vOutParam = "";

        ds = ExeProcDT3("Searchtable5", "", ref vOutParam);
        if (ds.Tables.Count >0)
        {
            DataTable dt = new DataTable();
            dt = ds.Tables[0];
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < 9; i++)
                {

                    Count2[i] = Convert.ToDouble(dt.Rows[i]["AM"]);
                    Count1[i] = dt.Rows[i]["c"].ToString() + dt.Rows[i]["a"].ToString();

                }
            }
        }
        zhuzhaugntu(Count1, Count2);



    }

    //柱状图图形的设置
    private void zhuzhaugntu(string[] a, double[] b)
    {
        Chart1.ChartAreas[0].BackColor = Color.Black;//设置背景为黑色
        Chart1.ChartAreas[0].Area3DStyle.PointGapDepth = 10;//x轴行间距
        Chart1.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;//需线
        Chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Yellow;//需线颜色
        Chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;//关掉竖线1
        //根据水尺最高值设置Y轴间距

        Chart1.ChartAreas[0].AxisY.Maximum = 5000;
        Chart1.Series[0].Label = "#VAL";//设置标签文本 (在设计期通过属性窗口编辑更直观)
        Chart1.Series[0].IsValueShownAsLabel = true;//显示标签
        Chart1.ChartAreas[0].AxisX.LabelStyle.ForeColor = Color.Blue;
        Chart1.ChartAreas[0].AxisX.LabelAutoFitMaxFontSize = 12;
        Chart1.ChartAreas[0].AxisY.LabelAutoFitMaxFontSize = 15;
        Chart1.ChartAreas[0].AxisY.LabelStyle.ForeColor = Color.Red;

        Chart1.Series[0].Points.DataBindXY(a, b);//初始化数据


        /*Chart1.Series[1].Label = "#VAL";
        Chart1.Series[1].IsValueShownAsLabel = true;
        Chart1.ChartAreas[0].AxisX2.LabelStyle.ForeColor = Color.Blue;
        Chart1.ChartAreas[0].AxisX2.LabelAutoFitMaxFontSize = 12;
        Chart1.Series[0].Points.DataBindXY(c);*/
    }
    //连接数据库
    private SqlConnection GetConnect()
    {
        string strSqlSqlConn = "Data Source=.;Initial Catalog=plc;" +
            "Persist Security Info=True;User ID=Jerome;Password=123456";
        SqlConnection sqlConnString = new SqlConnection(strSqlSqlConn);
        return sqlConnString;
    }
    /// <summary>
    /// 执行单入存过带多个表
    /// </summary>
    /// <param name="procName">存储过程名称</param>
    /// <param name="vInParam">输入参数</param>
    /// <param name="vOutParam">输出参数</param>
    /// <returns></returns>
    public DataSet ExeProcDT3(string procName, string vInParam, ref string vOutParam)
    {
        try
        {
            SqlConnString = GetConnect();
            SqlCommand SqlCmd = new SqlCommand(procName, SqlConnString);
            SqlCmd.CommandType = CommandType.StoredProcedure;
            SqlCmd.Parameters.Add("@inparam", SqlDbType.VarChar, 1000).Value = vInParam;
            SqlCmd.Parameters.Add("@outparam", SqlDbType.VarChar, 1024).Direction = ParameterDirection.Output;
            SqlDataAdapter SqlDa = new SqlDataAdapter(SqlCmd);

            DataSet DS = new DataSet();
            SqlDa.Fill(DS);
            vOutParam = SqlCmd.Parameters["@outparam"].Value.ToString();
            return DS;
        }
        catch (Exception)
        {
            return null;
        }
        finally
        {
            SqlConnString.Close();
        }
    }
}

}

10个回答

首先if (ds.Tables.Count >0)报未将对象引用......说明你ds根本没有获取到,和楼上说的一样判断改为if(ds.Tables != null &&ds.Tables.Count >0)
还有就是我并没有看到你有Open数据库。

SqlConnection sqlConnString = new SqlConnection(strSqlSqlConn);
sqlConnString.Open();

qq_23126581
渊渟无迹静涛君 加你了也没同意
一年多之前 回复
wodeqq584958184
wodeqq584958184 回复wodeqq584958184: 584958184 非常感谢你~
一年多之前 回复
wodeqq584958184
wodeqq584958184 回复qq_23126581: 还是不会。。。 你加我QQ吧 看看能不能为我解决下。。。。
一年多之前 回复
qq_23126581
渊渟无迹静涛君 回复wodeqq584958184: 你这个系统提示不存在ds。。。。。那就是未定义ds。反正你一步一步跟着程序走,打断点,很快就能找到错误。
一年多之前 回复
wodeqq584958184
wodeqq584958184 回复qq_23126581:系统提示说我:上下文中不存在名称“ds”0.0
一年多之前 回复
qq_23126581
渊渟无迹静涛君 回复wodeqq584958184: 你应该再ExeProcDT3这个方法里debug,打断点,具体到是那一步出错。
一年多之前 回复
wodeqq584958184
wodeqq584958184 的确 可能不小心漏了这句,但我现在补回来了,下面的sqlConnString.close();也显示同样上面同样的错误信息
一年多之前 回复
 执行到catch (Exception)
        {
            return null;
        }这块了

                去掉try..catch看具体报什么错误
wodeqq584958184
wodeqq584958184 回复showbo: 我发了 在下面 不好意思 刚刚出去吃饭了 真的麻烦你了~
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复wodeqq584958184: 发你最终修改的代码。NullReferenceException 说明连接对象都没有创建,GetConnect有问题
一年多之前 回复
wodeqq584958184
wodeqq584958184 回复sho没有提示错误,就是F11的时候提示 SqlConnString.Close();这一句,提示用户代码未处理NullReferenceException
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复wodeqq584958184: 提示什么错误?
一年多之前 回复
wodeqq584958184
wodeqq584958184 按照你方法试了,还是一样的错误,不过我现在把 SqlConnString.Open();和 SqlConnString.Close();放在同一个方法里,提示相同的错误是再Close那一句的地方
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复wodeqq584958184: try一起去掉啊。。
一年多之前 回复
wodeqq584958184
wodeqq584958184 回复showbo: 但系统提示我一定要有个Catch或finally语句插入才行
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复wodeqq584958184: ExeProcDT3只保留try{。。。。。}中。。。。的内容。。其他的删除才能看到具体错误。IDE提示当前上下文中不存在名称“ExeProcDT3”说明这个方法你改错了,语法错误了
一年多之前 回复
wodeqq584958184
wodeqq584958184 回复showbo:0.0大神 不太懂你什么意思,你是想让我注释掉catch和finally的这两部分代码吗?、
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复wodeqq584958184: 你改错ExeProcDT3方法了吧,ExeProcDT3只留把try{...}中的....部分,其他代码去掉看具体错误是什么
一年多之前 回复
wodeqq584958184
wodeqq584958184 按照你的方法,我把这一块注释掉了,提示当前上下文中不存在名称“ExeProcDT3”
一年多之前 回复

本人在线等 很急~!!!!!

有可能是数据库没有正确关闭导致的,调试过程中开启后,直接关闭了调试
下次运行时ExeProcDT3返回null,然后直接引用会出错
1.全部关闭,clean后重新编译运行
2.if (ds.Tables.Count >0)
改为
if(ds!=null && ds.Tables != null &ds.Tables.Count >0)试一下,这样可能会有用

wodeqq584958184
wodeqq584958184 回复zheshiweihe: 都试过了,还是不行
一年多之前 回复
zheshiweihe
zheshiweihe 回复zheshiweihe: 重启电脑后还不好用的话,看下数据库的表是不是有错误数据
一年多之前 回复
zheshiweihe
zheshiweihe 回复wodeqq584958184: 因为数据库没有正确关闭,还不行的话,可以重启数据库,再不行重启服务,再不行重启电脑
一年多之前 回复
zheshiweihe
zheshiweihe 回复wodeqq584958184: 对
一年多之前 回复
wodeqq584958184
wodeqq584958184 我试了一下你的第二步,没有报错,但是没有数据显示出来0.0
一年多之前 回复
wodeqq584958184
wodeqq584958184 第一步意思是关闭SQL server 然后清理下VS的解决方案 然后再运行试试看吗?
一年多之前 回复

ExeProcDT3函数返回空啊,要进这个函数里去调试,查找返回空的具体原因。

dataset是个空对象,检查在if之前,dataset中是否存在table

wodeqq584958184
wodeqq584958184 请问怎么检查?
一年多之前 回复

去掉try..catch,然后一步步检查。

wodeqq584958184
wodeqq584958184 提示我“zhu.WebForm1.ExeProcDT3(String,String,ref string)”:并非所有的代码路径都返回值
一年多之前 回复

改这样,看具体错误是什么,肯定是有问题了存储过程

 public DataSet ExeProcDT3(string procName, string vInParam, ref string vOutParam)
    {
            SqlConnString = GetConnect();
            SqlCommand SqlCmd = new SqlCommand(procName, SqlConnString);
            SqlCmd.CommandType = CommandType.StoredProcedure;
            SqlCmd.Parameters.Add("@inparam", SqlDbType.VarChar, 1000).Value = vInParam;
            SqlCmd.Parameters.Add("@outparam", SqlDbType.VarChar, 1024).Direction = ParameterDirection.Output;
            SqlDataAdapter SqlDa = new SqlDataAdapter(SqlCmd);

            DataSet DS = new DataSet();
            SqlDa.Fill(DS);
            vOutParam = SqlCmd.Parameters["@outparam"].Value.ToString();
            return DS;
    }

目前代码是这样,没有报错,但按下F11调试时候,在SqlConnString .Close()也提示同样的异常信息,提示用户代码未处理NullReferenceException

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Web.UI.DataVisualization.Charting;

namespace zhu
{
public partial class WebForm1 : System.Web.UI.Page
{
private SqlConnection SqlConnString;

    string[] Count1 = new string[9];
    double[] Count2 = new double[9];
    //string[] Count3 = new string[11];
    protected void Page_Load(object sender, EventArgs e)
    {

        DataSet ds = new DataSet();
        string vOutParam = "";

        ds = ExeProcDT3("Searchtable5", "", ref vOutParam);
        if (ds.Tables.Count >0)
        {
            DataTable dt = new DataTable();
            dt = ds.Tables[0];
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < 9; i++)
                {

                    Count2[i] = Convert.ToDouble(dt.Rows[i]["AM"]);
                    Count1[i] = dt.Rows[i]["c"].ToString() + dt.Rows[i]["a"].ToString();

                }
            }
        }
        zhuzhaugntu(Count1, Count2);



    }

    //柱状图图形的设置
    private void zhuzhaugntu(string[] a, double[] b)
    {
        Chart1.ChartAreas[0].BackColor = Color.Black;//设置背景为黑色
        Chart1.ChartAreas[0].Area3DStyle.PointGapDepth = 10;//x轴行间距
        Chart1.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;//需线
        Chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Yellow;//需线颜色
        Chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;//关掉竖线1
        //根据水尺最高值设置Y轴间距

        Chart1.ChartAreas[0].AxisY.Maximum = 5000;
        Chart1.Series[0].Label = "#VAL";//设置标签文本 (在设计期通过属性窗口编辑更直观)
        Chart1.Series[0].IsValueShownAsLabel = true;//显示标签
        Chart1.ChartAreas[0].AxisX.LabelStyle.ForeColor = Color.Blue;
        Chart1.ChartAreas[0].AxisX.LabelAutoFitMaxFontSize = 12;
        Chart1.ChartAreas[0].AxisY.LabelAutoFitMaxFontSize = 15;
        Chart1.ChartAreas[0].AxisY.LabelStyle.ForeColor = Color.Red;

        Chart1.Series[0].Points.DataBindXY(a, b);//初始化数据


        /*Chart1.Series[1].Label = "#VAL";
        Chart1.Series[1].IsValueShownAsLabel = true;
        Chart1.ChartAreas[0].AxisX2.LabelStyle.ForeColor = Color.Blue;
        Chart1.ChartAreas[0].AxisX2.LabelAutoFitMaxFontSize = 12;
        Chart1.Series[0].Points.DataBindXY(c);*/
    }
    //连接数据库
    private SqlConnection GetConnect()
    {
        string strSqlSqlConn = "Data Source=.;Initial Catalog=plc;" +
            "Persist Security Info=True;User ID=Jerome;Password=123456";
        SqlConnection sqlConnString = new SqlConnection(strSqlSqlConn);
    SqlConnString.Close();
    SqlConnString.Open();
        return sqlConnString;
    }
    /// <summary>
    /// 执行单入存过带多个表
    /// </summary>
    /// <param name="procName">存储过程名称</param>
    /// <param name="vInParam">输入参数</param>
    /// <param name="vOutParam">输出参数</param>
    /// <returns></returns>
    public DataSet ExeProcDT3(string procName, string vInParam, ref string vOutParam)
    {

            SqlConnString = GetConnect();
            SqlCommand SqlCmd = new SqlCommand(procName, SqlConnString);
            SqlCmd.CommandType = CommandType.StoredProcedure;
            SqlCmd.Parameters.Add("@inparam", SqlDbType.VarChar, 1000).Value = vInParam;
            SqlCmd.Parameters.Add("@outparam", SqlDbType.VarChar, 1024).Direction = ParameterDirection.Output;
            SqlDataAdapter SqlDa = new SqlDataAdapter(SqlCmd);

            DataSet DS = new DataSet();
            SqlDa.Fill(DS);
            vOutParam = SqlCmd.Parameters["@outparam"].Value.ToString();
            return DS;
    }
}

}

问题已解决了 谢谢大家的帮忙 非常感谢~!!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!