首先,我创建了一个调用存储过程的临时表。

然后,当尝试从同一个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将起作用。不知道原因,但是如果上述解决方案失败,它将解决此问题。
对不起,我的英语不好。
希望能帮助到你

09-25 21:31