以下引发以下异常的代码..
错误讯息:
对象引用未设置为 对象的实例。堆栈跟踪:
在 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();
}
答案 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是一个类级变量,你是否有多次调用相同方法的问题?班上有什么静态的吗?你在使用多线程吗?