日期:2014-05-18  浏览次数:20785 次

求助:未将对象引用设置到对象实例

连接SQL2005,不知道错在哪,把里面数据库连接的代码贴了上来。

C# code
using System;
using System.Linq;
using System.Data.SqlClient;
using System.Data;
using System.ComponentModel;
using System.Windows.Forms;

namespace QQClass
{
    /// <summary>
    /// ClassOptionData 的摘要说明。
    /// </summary>
    public class ClassOptionData : Component
    {
        private string ConStr = "Data Source=127.0.0.1;Database=db_MyQQ;User ID=sa;PWD=;";

        public ClassOptionData()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }
        public int ExSQL(string SQLStr)//执行任何SQL语句,返回所影响的行数
        {
            try
            {
                SqlConnection cnn = new SqlConnection(ConStr);
                SqlCommand cmd = new SqlCommand(SQLStr, cnn);
                cnn.Open();
                int i = 0;
                i = cmd.ExecuteNonQuery();
                cmd.Dispose();
                cnn.Close();
                cnn.Dispose();
                return i;
            }
            catch { return 0; }

        }

        public int ExSQLLengData(object Data, string par, string SQLStr)//执行任何SQL语句,返回所影响的行数
        {
            try
            {
                SqlConnection cnn = new SqlConnection(ConStr);
                SqlCommand cmd = new SqlCommand(SQLStr, cnn);
                cnn.Open();
                int i = 0;
                cmd.Parameters.Add(par, System.Data.SqlDbType.Binary);
                i = cmd.ExecuteNonQuery();
                cmd.Dispose();
                cnn.Close();
                cnn.Dispose();
                return i;
            }
            catch { return 0; }

        }

        public int ExSQLR(string SQLStr)//执行任何SQL查询语句,返回所影响的行数
        {
            try
            {
                SqlConnection cnn = new SqlConnection(ConStr);
                SqlCommand cmd = new SqlCommand(SQLStr, cnn);
                cnn.Open();
                SqlDataReader dr;
                int i = 0;
                dr = cmd.ExecuteReader();
                while (dr.Read())
                { i++; }
                cmd.Dispose();
                cnn.Close();
                cnn.Dispose();
                return i;
            }
            catch { return 0; }

        }

        public object ExSQLReField(string field, string SQLStr)//执行任何SQL查询语句,返回一个字段值
        {
            try
            {
                SqlConnection cnn = new SqlConnection(ConStr);
                SqlCommand cmd = new SqlCommand(SQLStr, cnn);
                cnn.Open();
                SqlDataReader dr;
                object fieldValue = null;
                dr = cmd.ExecuteReader();
                if (dr.Read())
                { fieldValue = dr[field]; }
                cmd.Dispose();
                cnn.Close();
                cnn.Dispose();
                return fieldValue;
            }
            catch { return null; }

        }

        public SqlDataReader ExSQLReDr(string SQLStr)//执行任何SQL查询语句,返回一个SqlDataReader
        {
            try
            {
                SqlConnection cnn = new SqlConnection(ConStr);
                SqlCommand cmd = new SqlCommand(SQLStr, cnn);
                cnn.Open();
                SqlDataReader dr;
                dr = cmd.ExecuteReader();
                return dr;
            }
            catch { return null; }
        }
    }
}



------解决方案--------------------
依次检查

OptionData.ExSQLReDr返回值
DataReader.GetInt32(索引)
这些是否为空
------解决方案--------------------
你的代码需要改正
catch { return 0; }
catch { return null; }
都是不正确的写法
不能回避异常,到时候你会不知道你哪里出问题了
应该是
catch { throw; }//这里的异常需要在界面上去捕获