首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >插入后未启动ConnectionString!

插入后未启动ConnectionString!
EN

Stack Overflow用户
提问于 2011-07-04 23:04:01
回答 2查看 193关注 0票数 3

我遇到了这个小问题:每次我的代码执行下面的InsertOrder()例程时,我都会收到这样的异常消息:“连接字符串尚未初始化”。

下面是InsertOrder()方法的代码:

代码语言:javascript
复制
  private void InsertOrder()
{
    string insertSQL = "";

    insertSQL += "INSERT INTO Orders (";
    insertSQL += "UserName, DateCreated, LastUpdate, Description, PaymentType, Delivery, Total) ";
    insertSQL += "VALUES (@UserName, @DateCreated, @LastUpdate, @Description, @PaymentType, @Delivery, @Total)";

    SqlCommand cmd0 = new SqlCommand(insertSQL, connection);

    // Adds the parameters
    cmd0.Parameters.AddWithValue("@UserName", Profile.UserName.ToString());
    cmd0.Parameters.AddWithValue("@DateCreated", Profile.Orders.SCart.DateCreated());
    cmd0.Parameters.AddWithValue("@LastUpdate", Profile.Orders.SCart.LastUpdate());
    cmd0.Parameters.AddWithValue("@Description", Profile.Orders.SCart.GetCartDescription());
    cmd0.Parameters.Add("@PaymentType", SqlDbType.Bit).Value = Profile.Orders.SCart.PaymentType;
    cmd0.Parameters.Add("@Delivery", SqlDbType.Bit).Value = Profile.Orders.SCart.Delivery;
    cmd0.Parameters.AddWithValue("@Total", Profile.Orders.SCart.Total);

    try
    {
        using (connection)
        {
            connection.Open();
            cmd0.ExecuteNonQuery();
        }

        string selectSQL = "SELECT OrderID FROM Orders WHERE UserName=@UserName AND DateCreated=@DateCreated";
        SqlCommand cmd1 = new SqlCommand(selectSQL, connection);

        cmd1.Parameters.AddWithValue("@UserName", Profile.UserName);
        cmd1.Parameters.AddWithValue("@DateCreated", Profile.Orders.SCart.DateCreated());
        SqlDataReader reader;

        using (connection)
        {
            connection.Open();
            reader = cmd1.ExecuteReader();
            reader.Read();
            OrderID = (int)reader["OrderID"];
            reader.Close();
        }

        // Store registered customer information for later usage..
        if (!Profile.IsAnonymous)
        {
            string insertSQL2 = "";

            insertSQL2 += "INSERT INTO CategoriesInAnOrder (";
            insertSQL2 += "OrderID, CategoryID, Quantity) VALUES (@OrderID, @CategoryID, @Quantity)";

            foreach (CartItem item in Profile.Orders.SCart.Items)
            {
                SqlCommand cmd2 = new SqlCommand(insertSQL2, connection);
                cmd2.Parameters.AddWithValue("@OrderID", OrderID);
                cmd2.Parameters.AddWithValue("@CategoryID", item.CategoryID);
                cmd2.Parameters.AddWithValue("@Quantity", item.Quantity);
                using (connection)
                {
                    connection.Open();
                    cmd2.ExecuteNonQuery();
                }
            }
        }
    }
    catch (Exception err)
    {
        pnlWizard.Visible = false;
        lblError.Text = err.Message;
    }
}  

也许值得说的是,我在SuperClass中放置了一个SqlConnection对象,因此每个子类(如包含上述方法的子类)都继承此属性。

shared SqlConnection对象设置如下:

代码语言:javascript
复制
    protected SqlConnection connection = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DefaultConnectionString"].ConnectionString);

对不起,我的英语...我是意大利人

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-04 23:07:50

我认为

代码语言:javascript
复制
using(connection)

可能是你问题的根源。

using()将导致在调用完成时在连接上调用Dispose(),但您的连接只被实例化一次。

下一次你使用它时,它将不会处于健康状态!

请考虑每次创建一个新连接:

代码语言:javascript
复制
protected SqlConnection connection 
{
    get
    {
        return new SqlConnection
          (System.Web.Configuration.WebConfigurationManager.ConnectionStrings 
          ["DefaultConnectionString"].ConnectionString); 
    }
}
票数 3
EN

Stack Overflow用户

发布于 2011-07-04 23:14:11

我怀疑问题在于您正在using字段中的值。这将只工作一次,但是在Dispose() 之后,您已经注定了该连接的

对于这个场景,我使用了一个自定义的EnsureOpen()方法,如果它还没有打开,它将返回一个IDisposable;用法:

代码语言:javascript
复制
using(connection.EnsureOpen())
{
    // use it
}

这样,就不会过早地释放连接,而是在需要时打开连接。另外,无论它是否已经打开,它都是有效的。

如果你愿意,我可以稍后分享EnsureOpen。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6573157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档