Gokulnath007 Ответов: 3

Как избежать того, чтобы ссылка на объект не была установлена на ошибку экземпляра?


Как избежать того, чтобы ссылка на объект не была установлена на ошибку экземпляра? Я получаю эту ошибку только после установки и развертывания. Он отлично работает в режиме отладки и выпуска в среде visual studio? Изначально управление начинается с функции getproject (). Затем он вызывает свойство obOpenedSqlConnection.


public class OutlookDataAccess
    {

        #region Public Methods and Properties
        SqlConnection _sqlConnection; //= new SqlConnection(); // null;
        SqlCommand obSqlCommand;
        SqlDataAdapter obSqlDataAdapter;

        SqlParameter parm;

        //SqlConnection _sqlConnection = new SqlConnection();

        public SqlConnection obOpenedSqlConnection
        {
            get
            {
                MessageBox.Show("Before Open");
                if (_sqlConnection != null)
                {
                    MessageBox.Show("inside Open");
                    if (_sqlConnection.State == ConnectionState.Closed)
                    {
                        try
                        {
                            MessageBox.Show( "Before Open");
                           _sqlConnection.Open();                         
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Open Exception");
                            throw ex;
                        }
                    }
                    return _sqlConnection;
                }
                else
                { 
                    var connectionString = ConfigurationManager.ConnectionStrings["OutlookConnectionStringLocal"].ConnectionString;
                    
                    MessageBox.Show("Before Connection creation");
                    _sqlConnection = new SqlConnection(connectionString);
                    MessageBox.Show("After Connection creation");
                    return _sqlConnection;  
                }
            }
        }

        private void CloseSqlConnection()
        {
            if (_sqlConnection != null)
            {
                if (_sqlConnection.State == ConnectionState.Open)
                    _sqlConnection.Close();
            }
        }

        private void ClearCommandParameters()
        {
            if (obSqlCommand != null)
            {
                obSqlCommand.Parameters.Clear();
            }
        }

        private DataTable GetOutputDataTable(SqlDataAdapter sqlDataAdapter)
        {
            DataTable dataTable = new DataTable();
            if (sqlDataAdapter != null)
            {
                sqlDataAdapter.Fill(dataTable);
                ClearCommandParameters();
            }
            return dataTable;
        }

        public DataTable GetProject(string emailId)
        {
            try
            {
                MessageBox.Show("inside get project");
               
                obSqlCommand = new SqlCommand("sp_GetClientContact", obOpenedSqlConnection);
                //MessageBox.Show(emailId, "getprojectid");
                obSqlCommand.CommandType = CommandType.StoredProcedure;
                obSqlCommand.Parameters.AddWithValue("@emailId", emailId);
                obSqlDataAdapter = new SqlDataAdapter(obSqlCommand);


            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString(), "invalid object");
                throw exp;

            }
            finally
            {
                CloseSqlConnection();

            }
            return GetOutputDataTable(obSqlDataAdapter);
        }
}

Santhosh Kumar Jayaraman

Откуда у вас эта ошибка?какая линия?

3 Ответов

Рейтинг:
2

Keith Barrow

Моя догадка для вас проблема заключается в том, что

var connectionString = ConfigurationManager.ConnectionStrings["OutlookConnectionStringLocal"].ConnectionString;
возвращает null, так как ваша живая конфигурация, вероятно, отличается от вашей отладочной.


Лично я бы создал соединение для каждого вызова и выставил его для сбора мусора в конце вызова, хотя есть причины не делать этого. Есть еще несколько вещей не так с вашим классом ИМО:

1.
obOpenedSqlConnection
Должен быть метод.
2. не ловите гернейское исключение.
3. Рассмотрим using заявление когда вы создадите свой коммант, это автоматически закроет ваше соединение, но может также избавиться от него.
4. рассмотрим методы: создайте соединение, создайте новый командный объект и заполните его параметры (clearig чувствует себя хрупким).
5. Создание DataAdapter в
GetOutputDataTable
сокращение его масштабов.


Рейтинг:
2

Sangramsingh Pawar

создайте объект _sqlConnection с помощью нового ключевого слова

SqlConnection _sqlConnection = new SqlConnection();


Gokulnath007

_sqlConnection = new SqlConnection(connectionString);

Я уже использую это здесь?

Рейтинг:
2

_Amy

Лучший способ избежать этой ошибки-Всегда создавать новый экземпляр объектов или классов, которые вы собираетесь использовать. Иногда мы забываем об этом маленьком моменте и без инициализации и создания экземпляра объекта используем его для использования. Вот почему происходит такое исключение.

В вашем состоянии проверьте кодировку, в которой вы используете нулевые объекты для присвоения значений. Тщательно проследите код.

-- Амит