C# ASP.net:打开和关闭数据库连接

C# ASP.net:打开和关闭数据库连接,c#,asp.net,database,database-connection,C#,Asp.net,Database,Database Connection,我有这段代码,它首先检查数据库中是否已经存在特定的prodName。如果确实存在,我必须更新prodName中的数量。如果没有,我必须插入数据。我的问题是,这是一个好代码吗?我的意思是,像这样打开和关闭连接是一种良好的做法,还是有任何方法可以改进它?就像每次查询一样,我每次都要写这些开头和结尾行。有人能提出一个好的方法来保存这些重复的代码行吗?或者就是这样做的 public static void manageStock(CompanyStock stock) {

我有这段代码,它首先检查数据库中是否已经存在特定的
prodName
。如果确实存在,我必须更新
prodName
中的
数量。如果没有,我必须插入数据。我的问题是,这是一个好代码吗?我的意思是,像这样打开和关闭连接是一种良好的做法,还是有任何方法可以改进它?就像每次查询一样,我每次都要写这些开头和结尾行。有人能提出一个好的方法来保存这些重复的代码行吗?或者就是这样做的

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();
            }


        }


    }
你可以用

使用


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

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

您的代码引发异常:
ExecuteScalar需要一个打开且可用的连接。连接的当前状态为关闭。
if (con.State == ConnectionState.Closed)
            {
                con.Open();
            }