首先,我创建了一个调用存储过程的临时表。
然后,当尝试从同一个dbcontext中从第二个存储过程中获取结果时,我收到一条错误消息,指出临时表不再存在。
这是不完整的代码。
private void GetTempResult()
{
var tempTable = "##mytaemptable";
// var task = Task.Factory.StartNew(() => Services.StartPreparingTempList(clientId,tempTable));
// execute stored procedure to create temp table
Services.StartPreparingTempList(clientId, tempTable); // temptable gets created successfully here .
// execute stored procedure to get results from the above created temp table.
var tempResults = Services.GetPartialTempList(tempTable, jtableArgs); //getting error here . As soon as this statement gets executed the temp table ceases to exist.
}
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.GetPartialTempEmailList")]
public ISingleResult<JournalEmail> GetPartialTempEmailList([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="NVarChar(MAX)")] string tempTableName, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] System.Nullable<int> startIndex, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] System.Nullable<int> maxRowCount)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), tempTableName, startIndex, maxRowCount);
return ((ISingleResult<JournalEmail>)(result.ReturnValue));
}
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.StartPreparingTempList")]
public int StartPreparingTempList([global::System.Data.Linq.Mapping.ParameterAttribute(Name="ClientID", DbType="NVarChar(150)")] string clientID, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="NVarChar(MAX)")] string tempTableName, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] System.Nullable<int> maxRowCount)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), clientID, tempTableName, maxRowCount);
return ((int)(result.ReturnValue));
}
}
使用以下语句在新的连接/会话中执行存储过程吗?一旦执行该语句,临时表就不存在了,并引发错误:无效的对象名。
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), tempTableName, startIndex, maxRowCount);
有人可以指导我我所缺少的吗?
最佳答案
我猜您正在尝试创建一个全局临时表,并在一个存储过程(将其命名为sp1)中插入值值,并试图在sp2(将其命名为sp2)中另一个值中检索值。
检索第二个存储过程(sp2)时,linqtosql(在IExecuteResult结果中)会发生此问题。
我已解决问题,但将dbml文件中存储过程(sp2)的返回类型更改为以列名作为属性类型的类,该类是我在dbml设计器中创建的
要么
您可以创建与全局临时表具有相同返回类型的视图或表,并将其添加到设计器中。然后,您可以将视图/表用作存储过程的返回类型(sp2)
在图片中,sp_EditMVC_reconcile_fix_get_no_medical是(sp2),我用来检索全局临时表,而reconcile_no_medical_temp是我创建的类。
解决方案2:
我认为这是VS中的错误,因此我无法在其中找到逻辑,也没有时间立即找到。
在SP1中添加SP2查询,并使用自定义创建的类作为返回类型。然后,SP2将起作用。不知道原因,但是如果上述解决方案失败,它将解决此问题。
对不起,我的英语不好。
希望能帮助到你