ADO.NET:ExecuteScalar() 连接问题

标签 ado.net

这是我的 C# 代码

protected bool SaveItems(ObservableCollection<Model> Items, Int32 UserId)
    {
        if (sqlcon.State == ConnectionState.Closed)
            sqlcon.Open();
        foreach (Model Rate in Items)
        {
            SqlCommand sccmd = new SqlCommand("ItemsAdd", sqlcon);
            sccmd.CommandType = CommandType.StoredProcedure;
            sccmd.Parameters.Add("@ItemsId", SqlDbType.Int).Value = Rate.Id;
            sccmd.Parameters.Add("@RMId", SqlDbType.Int).Value = Rate.HeadId;
            sccmd.Parameters.Add("@Date", SqlDbType.DateTime).Value = Rate.Date;
            sccmd.Parameters.Add("@Price", SqlDbType.Decimal).Value = Rate.Price;
            sccmd.Parameters.Add("@UserId", SqlDbType.Int).Value = UserId;
            if (Rate.Id == 0)
            {
                Rate.Id = Convert.ToInt32(sccmd.ExecuteScalar());
            }
            else
                sccmd.ExecuteScalar();
        }
        sqlcon.Close();
        return true;
    }

重复点击添加按钮,这给了我这个错误

Additional information: ExecuteScalar requires an open and available Connection. The connection's current state is closed.

是什么原因导致此错误以及如何修复它?

最佳答案

尝试这样:

protected bool SaveItems(ObservableCollection<Model> Items, Int32 UserId)
{
    if (sqlcon.State == ConnectionState.Closed)
{
        sqlcon.Open();
    foreach (Model Rate in Items)
    {
        SqlCommand sccmd = new SqlCommand("ItemsAdd", sqlcon);
        sccmd.CommandType = CommandType.StoredProcedure;
        sccmd.Parameters.Add("@ItemsId", SqlDbType.Int).Value = Rate.Id;
        sccmd.Parameters.Add("@RMId", SqlDbType.Int).Value = Rate.HeadId;
        sccmd.Parameters.Add("@Date", SqlDbType.DateTime).Value = Rate.Date;
        sccmd.Parameters.Add("@Price", SqlDbType.Decimal).Value = Rate.Price;
        sccmd.Parameters.Add("@UserId", SqlDbType.Int).Value = UserId;
        if (Rate.Id == 0)
        {
            Rate.Id = Convert.ToInt32(sccmd.ExecuteScalar());
        }
        else
            sccmd.ExecuteScalar();
    }
    sqlcon.Close();
    }
    return true;
}

关于ADO.NET:ExecuteScalar() 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29163260/

相关文章:

c# - 无法使用 Microsoft.Jet.OLEDB.4.0 提供程序正确读取 csv 文件

sql - 从事务中的 SQL 批处理中止错误中恢复?选择?

mysql - Linq Entity Framework 更新查询

database - 带有 OLE DB Access 数据源的 ADO.NET Entity Framework

c# - 我能否将数据临时存储在我的 C#.Net 应用程序中以减少从 SQL Server 调用数据的需要?

C# if 语句与 dropdownlist.selectedvalue

.net - LINQ to SQL 还是经典的 ADO.NET?

c# - SqlCommand返回值参数

c# - 以最佳性能将数据插入 SQL Server

c# - 如何将 DataSet a 转换为 DataReader?