SqlCommand C#问题

时间:2009-06-12 04:51:42

标签: c# sqlconnection sqlcommand

以下引发以下异常的代码..

错误讯息:

  

对象引用未设置为   对象的实例。堆栈跟踪:
  在   System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior   cmdBehavior,RunBehavior runBehavior,   布尔型returnStream)at   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 个答案:

答案 0 :(得分:1)

不是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参数上指定了最大长度(根据需要进行调整),使用{}块包装所有内容 - 这就是它。

你还得到同样的错误吗?

马克

答案 1 :(得分:1)

HI

代码似乎没问题(我建议您使用在前一个答案中向您演示的using子句)。我想知道问题是不是来自存储过程。尝试调试它,或者至少在存储过程的开始和结束时添加一些日志记录,以确保每次都退出。

答案 2 :(得分:0)

确保您要连接的SQL Server中存在sproc“prc_CheckIn”。也许它在连接中被拼写错误或无法访问。

答案 3 :(得分:0)

执行sqlcommand

后,您应该始终立即关闭sqlconnection

如果这不是函数的一部分,则不需要使用new恢复它 - 只需打开它就足够了。

答案 4 :(得分:0)

您是否尝试过禁用连接池和/或多个活动结果集?我忘了连接字符串选项,但是如果你调用连接字符串构建器,它应该在高级属性网格上。或者在www.connectionstrings.com上。

此外,这是一个“用户实例”数据库,就像使用SQL Express将.mdf文件添加到Visual Studio项目一样吗?

答案 5 :(得分:0)

sqlCon是一个类级变量,你是否有多次调用相同方法的问题?班上有什么静态的吗?你在使用多线程吗?