【问题标题】:ASP.net: Opening and closing database connectionsASP.net:打开和关闭数据库连接
【发布时间】:2014-04-10 18:15:33
【问题描述】:

我有这段代码,它首先检查数据库中是否已经存在特定的prodName。如果它确实存在,我必须更新那个prodNamequantity。如果没有,我必须插入数据。我的问题是,这是一个好的代码吗?我的意思是打开和关闭这样的连接是一个好习惯,还是有什么办法可以改进它?就像每个查询一样,我每次都必须编写这些开始和结束行。任何人都可以提出一种保存这些重复代码行的好方法,或者它只是以这种方式完成的吗?

public static void manageStock(CompanyStock stock)
        {

            cmd = new SqlCommand("select count(*) from tblStock where prodName=@prodName", con);
            cmd.Parameters.AddWithValue("@prodName", stock.prodName);
            int count;

            try
            {
                con.Open();
                count = (Int32)cmd.ExecuteScalar(); //returns null if doesnt exist
            }

            finally {
                con.Close();
            }


            if (count > 0)
            {
                cmd = new SqlCommand("select quantity from tblStock where prodName=@prodName", con);
                cmd.Parameters.AddWithValue("@prodName", stock.prodName);
                try
                {
                    con.Open();
                    qty = (Int32)cmd.ExecuteScalar(); 
                }

                finally
                {
                    con.Close();
                }

                stock.quantity += qty;
                cmd = new SqlCommand("update tblStock set quantity = @quantity where prodName=@prodName", con);
                cmd.Parameters.AddWithValue("@prodName", stock.prodName);
                cmd.Parameters.AddWithValue("@quantity", stock.quantity);

            }
            else
            {

                cmd = new SqlCommand("insert into tblStock(prodName,quantity) values (@prodName, @quantity)", con);
                cmd.Parameters.AddWithValue("@prodName",stock.prodName);
                cmd.Parameters.AddWithValue("@quantity",stock.quantity);

            }


            try
            {
                con.Open();
                cmd.ExecuteNonQuery();

            }

            finally
            {
                con.Close();
            }


        }


    }

【问题讨论】:

    标签: c# asp.net database database-connection


    【解决方案1】:

    你可以使用

    使用

    public static void manageStock(CompanyStock stock)
        {
    
            using(var con=new SqlConnection("ConnectionString"))
            {
            cmd = new SqlCommand("select count(*) from tblStock where prodName=@prodName", con);
            cmd.Parameters.AddWithValue("@prodName", stock.prodName);
            int count;
    
    
            count = (Int32)cmd.ExecuteScalar(); //returns null if doesnt exist
    
    
            if (count > 0)
            {
                cmd = new SqlCommand("select quantity from tblStock where prodName=@prodName", con);
                cmd.Parameters.AddWithValue("@prodName", stock.prodName);
    
                qty = (Int32)cmd.ExecuteScalar(); 
    
    
                stock.quantity += qty;
                cmd = new SqlCommand("update tblStock set quantity = @quantity where prodName=@prodName", con);
                cmd.Parameters.AddWithValue("@prodName", stock.prodName);
                cmd.Parameters.AddWithValue("@quantity", stock.quantity);
    
            }
            else
            {
    
                cmd = new SqlCommand("insert into tblStock(prodName,quantity) values (@prodName, @quantity)", con);
                cmd.Parameters.AddWithValue("@prodName",stock.prodName);
                cmd.Parameters.AddWithValue("@quantity",stock.quantity);
    
            }
            cmd.ExecuteNonQuery();
        }
    }
    

    【讨论】:

    • 你的代码抛出异常:ExecuteScalar requires an open and available Connection. The connection's current state is closed.
    【解决方案2】:

    您可以在打开之前检查它的状态,

    if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                }
    

    【讨论】:

      猜你喜欢
      • 2019-12-31
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      相关资源
      最近更新 更多