所以我使用了这个旧的代码,它为数据库调用运行简单的ExecuteNonQuery命令。我正在使用DbConnection,DbTransaction和其他System.Data.Common命令。这个数据库类的执行查询函数有什么问题吗?
只要我在项目的某些部分使用该函数,似乎会得到很多空引用错误,尽管在其他部分看起来很好。我认为它与手动打开连接或调用它有一些问题有关,但是我想知道函数本身是否原本设计得很差(不应该有办法以它被调用的方式修复任何问题吗?)
我觉得涉及到事务时,这些空引用错误会出现得更多,我认为我得到的错误是空例外“_command = _db.GetStoredProcCommand(storedProcedure);”里面有以下功能。但该存储过程确实存在,所以它没有任何意义。
public List<OutputParameter> execute(String storedProcedure, StoredProcedureParameter[] sqlParameters)
{
try
{
List<OutputParameter> outputParameters = new List<OutputParameter>();
_command = _db.GetStoredProcCommand(storedProcedure);
for (int x = 0; x < sqlParameters.GetLength(0); x++)
{
if (sqlParameters[x] != null)
{
StoredProcedureParameter sqlParameter = sqlParameters[x];
String param = sqlParameter.ParameterName;
DbType dbType = sqlParameter.DbType;
object value = sqlParameter.Value;
if (sqlParameter.IsOutputParam)
{
_db.AddOutParameter(_command, param, dbType, 32);
OutputParameter outputParameter = new OutputParameter(param);
outputParameters.Add(outputParameter);
}
else
_db.AddInParameter(_command, param, dbType, value);
}
}
if (_transaction == null)
_db.ExecuteNonQuery(_command);
else
_db.ExecuteNonQuery(_command, _transaction);
foreach (OutputParameter op in outputParameters)
{
op.ParameterValue = _db.GetParameterValue(_command, op.ParameterName);
}
return outputParameters;
}
catch (SqlException sqle)
{
throw new DataAccessException(sqle.ToString());
}
catch (Exception e)
{
throw new DataAccessException(e.ToString());
}
}
'_command'定义在哪里?还有哪些地方被访问? – Oded
private DbCommand _command = null; ---这不是呃,除了通过这个GetStoredProcCommand的东西来启动。它可以在QueryDatabase()等其他函数中访问,它可以返回结果而不是像execute()那样执行。 – Dexter
并且您访问了多少个地方?你在代码中的许多地方使用'execute'吗? – Oded