簡體   English   中英

嘗試使用asp.net更新數據庫時出現異常錯誤

[英]Exception Error in trying to update database using asp.net

為什么我在嘗試更新數據庫時遇到此錯誤?

ExecuteNonQuery需要一個開放且可用的連接。 連接的當前狀態已關閉

這是代碼:

cmd1 = new SqlCommand("UPDATE [guitarBrands] SET type = @type, name = @name, image = @image WHERE id = @id", con1);

con1.Open();

cmd1.Parameters.Add(new SqlParameter("type", newType.Text));
cmd1.Parameters.Add(new SqlParameter("name", newName.Text));
cmd1.Parameters.Add(new SqlParameter("image", newImage.Text));
cmd1.Parameters.Add(new SqlParameter("id", id));

cmd1.ExecuteNonQuery();

con1.Close();
cmd1.Parameters.Clear();

cmd = new SqlCommand("UPDATE [guitarItems] SET brand = @brand WHERE id = @id", con1);
con.Open();

cmd.Parameters.Add(new SqlParameter("brand", newName.Text));
cmd.Parameters.Add(new SqlParameter("id", id));

cmd.ExecuteNonQuery();
con.Close();

cmd.Parameters.Clear();

為避免出現這類問題,建議您使用電源塔

using(var connection = new SqlConnection(dbConnection))
{
     connection.Open();
     using(var command = new SqlCommand(query, connection)
     {

     }

     using(var command = new SqlCommand(query, connection)
     {

     }
}

所以權力塔的美麗,使用塊將在給定的代碼塊內實現。 因此,這將清楚地表明,這兩個命令都使用了與使用相同的連接。 此外,一旦代碼超出范圍,它將實現IDispose ,它將調用垃圾收集器來釋放資源。

另外,你應該選擇。 SqlCommand接受參數數組。 因此,如果您使用方法調用,您可以簡單地執行:

public static GetExample(string query, params SqlParameter[] parameters)
{
     using(var connection = new SqlConnection("YourDbConnection"))
     using(var command = new SqlCommand("YourQuery", connection))
     {
          connection.Open();
          if(parameters != null)
               if(parameters.Any())
                    command.Parameters.Add(parameters);

          command.ExecuteNonQuery();
     }
}

我不記得該集合是添加,添加范圍還是連續。 但無論哪種方式存在選擇。

cmd = new SqlCommand("UPDATE [guitarItems] SET brand = @brand WHERE id = @id", con1);

將此行替換為此

cmd = new SqlCommand("UPDATE [guitarItems] SET brand = @brand WHERE id = @id", con);

在您的代碼中,您在命令“cmd1”和“cmd”中使用Connexion“con1”。 對兩個命令只使用一個連接是可以的,但是你應該將連接打開,直到兩個命令都被執行。 在您的情況下,您選擇為第二個命令使用新的連接“con”,但是您重新打開“con1”。 所以你得到一個錯誤,因為永遠不會打開“con”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM