我编写了一个连接到SQL Server 2008数据库的WCF服务。我偶尔会在存储过程执行时收到以下错误:
已经有一个与此命令关联的开放式数据加载器,必须先关闭
请注意,我没有使用DataReader
,我使用的是SqlDataAdapter
,而是定义为本地变量。
我正在调用SqlCommand
和SqlDataAdapter
类的dispose方法,但我仍然收到此错误。
请告知我在这里遗失的内容。
public DataTable executeScalerDT(string sSPName, string[] sParameterNames, string[] sParameterValues, string[] sParameterDataTypes)
{
int iReturnCode = 0;
DataTable oDataTable = null;
int i = 0;
try
{
SqlCommand oSQLCommand = new SqlCommand(sSPName, oConnection);
oSQLCommand.CommandType = CommandType.StoredProcedure;
SqlParameter oSQLParameter = null;
SqlParameter p_RETURN_CODE = null;
for (i = 0; i < sParameterNames.Length; i++)
{
if (sParameterNames[i] != "@iReturnCode")
{
oSQLParameter = oSQLCommand.Parameters.Add(sParameterNames[i], getDataType(sParameterDataTypes[i]));
oSQLParameter.Direction = ParameterDirection.Input;
oSQLParameter.Value = sParameterValues[i];
}
else
{
p_RETURN_CODE = oSQLCommand.Parameters.Add("@iReturnCode", getDataType(sParameterDataTypes[i]));
p_RETURN_CODE.Direction = ParameterDirection.Output;
}
}
SqlDataAdapter oSqlAdapter = new SqlDataAdapter(oSQLCommand);
oDataTable = new DataTable();
oSqlAdapter.Fill(oDataTable);
oSqlAdapter.Dispose();
oSQLCommand.Dispose();
}
catch (Exception ex)
{
SharedClasses.Logger.Error("[DAL.executeScalerDT] Exception Occurred sSPName:" + sSPName +" sTemplateCode:" + sTemplateCode + " ex:" + ex.Message);
}
return oDataTable;
}