尝试修复SQL异常:不允许新事务,因为会话中有其他线程在运行

问题描述 投票:0回答:1

这是我要做的事情的简要说明:在SQL端有一个全局临时表,我可以在C#wpf中从中选择它,并将其列在名为“ DataGridIns”的dataGrid中。我想通过chkBox选择一些行,然后使用StoredProcedure将其插入SQl中的表中。

因此,当我单击以发送SendRow时,它开始如下:

 HoEntities database = new HoEntities();  //using Entity FrameWork

        try
        {

            for (int i = 0; i < DataGridIns.Items.Count - 1; i++)
            {

                mChkBox = DataGridIns.Columns[0].GetCellContent(DataGridIns.Items[i]) as CheckBox;

                if (mChkBox.IsChecked == true)
                {

                    var dataitem = DataGridIns.Items[2].ToString();
                    _nullChckBox++;
                    var dateSelect = DataGridIns.Columns[1].GetCellContent(DataGridIns.Items[i]) as TextBlock;
                    var mainNameTBk = DataGridIns.Columns[2].GetCellContent(DataGridIns.Items[i]) as TextBlock;
                    var chinCodeTBk = DataGridIns.Columns[3].GetCellContent(DataGridIns.Items[i]) as TextBlock;
                    var chinNameTBk = DataGridIns.Columns[4].GetCellContent(DataGridIns.Items[i]) as TextBlock;

                    var mainCodeTBk = DataGridIns.Columns[6].GetCellContent(DataGridIns.Items[i]) as TextBlock;
                    var iodDescTBk = DataGridIns.Columns[7].GetCellContent(DataGridIns.Items[i]) as TextBlock;


                }

                database.sp_Ins_Main // using Stored Procedure insert in to mainTable
                                    (

                                    mainCodeTBk.Text.Trim(),
                                    mainNameTBk.Text.Trim(),
                                    Convert.ToInt32(chinCodeTBk.Text.Trim()),
                                    chinNameTBk.Text.Trim(),
                                    iodDescTBk.Text.Trim(),
                                    dateSelect.Text.Trim()

                                    );

                database.SaveChanges();

            }

        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

当我设置BreakPoint并逐步到达它时,到达

database.sp_Ins_Main

和如下所示从实体框架中的DataModel跳转到我的DataModel.Context.cs:

 public virtual int sp_Ins_Main(string mainCode, string mainName,
                                          Nullable<int> chinCode, string chinName,
                                          string iodDesc, string date)
    {
        var mainCodeParameter = mainCode != null ?
            new ObjectParameter("MainCode", mainCode) :
            new ObjectParameter("MainCode", typeof(string));

        var mainNameParameter = mainName != null ?
            new ObjectParameter("MainName", mainName) :
            new ObjectParameter("MainName", typeof(string));

        var chinCodeParameter = chinCode.HasValue ?
            new ObjectParameter("chinCode", chinCode) :
            new ObjectParameter("chinCode", typeof(int));

        var chinNameParameter = chinName != null ?
            new ObjectParameter("chinName", chinName) :
            new ObjectParameter("chinName", typeof(string));

        var iodDescParameter = iodDesc != null ?
            new ObjectParameter("iodDesc", iodDesc) :
            new ObjectParameter("iodDesc", typeof(string));

        var dateParameter = date != null ?
            new ObjectParameter("Date", date) :
            new ObjectParameter("Date", typeof(string));

        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_Ins_Main", mainCodeParameter, mainNameParameter, chinCodeParameter, chinNameParameter, iodDescParameter, dateParameter);
    }

并且从Return((IObjectContextAdapter)this)行开始……我得到了我在标题问题中所说的错误。

System.Data.SqlClient.SqlError:不允许新事务,因为会话中正在运行其他线程。

我从Temp Table中选择的方式错误,然后坐在datagrid select中,而我只想在Sql中插入表中?如何解决呢?

c# sql wpf stored-procedures sqlexception
1个回答
0
投票

这里是问题:

https://stackoverflow.com/a/6118275/421195

我遇到了同样的问题,但情况有所不同。

我在列表框中有一个项目列表。用户可以单击一个项目并选择删除,但我正在使用存储的proc来删除该项目,因为删除项目涉及很多逻辑。

当我调用存储的过程时,删除工作正常,但以后再调用SaveChanges会导致错误。

我的解决方案是在EF之外调用存储的proc,这很好用。出于某种原因,当我使用EF的处理方式调用storage> proc时,会留下一些空白。]

© www.soinside.com 2019 - 2024. All rights reserved.