【问题标题】:SqlCommand C# IssueSqlCommand C# 问题
【发布时间】:2009-06-12 04:51:42
【问题描述】:

下面这段代码会抛出以下异常..

错误信息:

对象引用未设置为 对象的实例。堆栈跟踪:
在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior、RunBehavior 运行行为、 布尔返回流)在 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();
}

【问题讨论】:

  • 您 100% 确定您正在连接到正确的数据库?你的连接字符串是什么样的?您是否尝试过指定“dbo.prc_CheckIn”??
  • 是的 sp 每 20 秒运行一次,我在其他时间没有收到此错误。
  • 那么自那些“其他时间”以来发生了什么变化??

标签: c# sqlconnection sqlcommand


【解决方案1】:

代码看起来没问题(我建议您使用前面的答案中向您展示的 using 子句)。我想知道问题是否不在存储过程中。尝试调试它,或者至少在存储过程的开头和结尾添加一些日志记录,以确保它每次都能正常退出。

【讨论】:

  • 这是个好主意 - 请记住,您看到的错误有时是由更深层次的错误引起的,该错误已经冒泡到被报告的地步。在这种情况下,由于代码通常可以正常工作,因此您应该查看外部(数据库)影响。
【解决方案2】:

不是 100% 确定这里发生了什么 - 但你可以试试这个 sn-p 代码吗?

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 参数上指定了一个最大长度(根据需要进行调整),使用 {} 块将所有内容包裹起来 - 仅此而已。

你还遇到同样的错误吗??

马克

【讨论】:

  • 是的。进行了提到的所有更改,但仍然出现错误。还为 sp 添加了数据库资格。所以现在是 abc.dbo.prc_CheckIn。代码每 20 秒运行一次,它可以正常运行几分钟,然后突然间我明白了。我应该提一下,这段代码所在的方法被多个线程使用。
【解决方案3】:

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

【讨论】:

  • 就是这样。将它包装在使用中肯定有帮助,但愚蠢的我错过了一些如此明显的东西。感谢 ck 指出。整个周末运行该过程没有收到错误。
【解决方案4】:

确保存储过程“prc_CheckIn”存在于您要连接的 SQL Server 中。可能是拼写错误,或者连接中的用户无法访问。

【讨论】:

  • prc_ChecIn 存在。这段代码运行良好,没有问题,只是偶尔会出现这个错误
【解决方案5】:

您应该始终在执行 sql 命令后立即关闭您的 sqlconnection

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

【讨论】:

  • 连接立即关闭,代码 sn-p 只是没有包含它。
【解决方案6】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多