SqlCommand C # Issue - PullRequest
       32

SqlCommand C # Issue

2 голосов
/ 12 июня 2009

Код ниже, который выдает следующее исключение ..

Сообщение об ошибке:

Ссылка на объект не установлена ​​на экземпляр объекта. Трассировка стека:
в System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) в System.Data.SqlClient.SqlCommand.ExecuteNonQuery ()

Я заблудился относительно причины, по которой ..

sqlcon = new SqlConnection(strSqlconnection);

SqlCommand sqlcomSMCheckin = new SqlCommand("prc_CheckIn", sqlcon);

sqlcomSMCheckin.CommandType = CommandType.StoredProcedure;

sqlcomSMCheckin.Parameters.Add("@Description", SqlDbType.VarChar).Value = "My App";

sqlcomSMCheckin.CommandTimeout = this.iCommandTimeOut;

if (sqlcon.State == ConnectionState.Closed)
{
   sqlcon.Open();
}

if (sqlcomSMCheckin != null)
{
    sqlcomSMCheckin.ExecuteNonQuery(); // error here
    sqlcomSMCheckin.Dispose();
}

Ответы [ 6 ]

1 голос
/ 12 июня 2009

HI

Код выглядит нормально (я рекомендую использовать предложение using, как было показано в предыдущем ответчике). Интересно, проблема не в хранимой процедуре? Попробуйте отладить его или, по крайней мере, добавьте некоторую запись в журнал в начале и конце хранимой процедуры, чтобы каждый раз проверять, что она завершается.

1 голос
/ 12 июня 2009

Не уверен на 100%, что здесь происходит - но вы можете попробовать этот фрагмент кода?

using(sqlcon = new SqlConnection(strSqlconnection))
{
   using(SqlCommand sqlcomSMCheckin = new SqlCommand("dbo.prc_CheckIn", sqlcon))
   {
       sqlcomSMCheckin.CommandType = CommandType.StoredProcedure;

       sqlcomSMCheckin.Parameters.Add("@Description", SqlDbType.VarChar, 50)
            .Value = "My App";

       sqlcomSMCheckin.CommandTimeout = this.iCommandTimeOut;

       sqlcon.Open();
       sqlcomSMCheckin.ExecuteNonQuery();
       sqlcon.Close();
   }
}

Я заменяю "prc_CheckIn" на "dbo.prc_CheckIn", я указываю максимальную длину в параметре VARCHAR (корректирую по мере необходимости), оборачивая все в блоки {} - вот и все.

Вы все еще получаете ту же ошибку ??

Марк

0 голосов
/ 12 июня 2009

Является ли sqlCon переменной уровня класса, у вас есть проблемы с одним и тем же методом, вызываемым несколько раз? Есть ли что-нибудь статичное в классе? Вы используете несколько потоков?

0 голосов
/ 12 июня 2009

Вы пытались отключить пул соединений и / или несколько активных наборов результатов? Я забыл параметр строки подключения для этого, но если вы вызываете конструктор строки подключения, он должен быть в расширенной сетке свойств. Или на сайте www.connectionstrings.com.

Кроме того, это база данных «экземпляра пользователя», например, когда вы добавляете файл .mdf в проект Visual Studio с помощью SQL Express?

0 голосов
/ 12 июня 2009

Вы должны всегда закрыть ваше sqlconnection сразу после выполнения команды sqlcomm

Если это не часть функции, то переустанавливать ее с новой не нужно - достаточно просто открыть ее.

0 голосов
/ 12 июня 2009

Убедитесь, что sproc "prc_CheckIn" существует в SQL Server, к которому вы подключаетесь. Может быть, оно написано с ошибкой и недоступно пользователю при подключении.

...