2011-08-26 45 views
0

我的代碼:ExecuteNonQuery需要一個開放且可用的Connection。連接的當前狀態下關閉

public bool Insertcustomer() 
{ 
    try 
    { 
     SqlCommand cmd = new SqlCommand("Insertcustomermaster", dal.con); 
     cmd.Parameters.Add("@customercode", SqlDbType.Int).Value = customercode; 
     cmd.Parameters.Add("@customername", SqlDbType.NChar).Value = customername; 
     cmd.Parameters.Add("@address1", SqlDbType.NChar).Value = address1; 
     cmd.Parameters.Add("@address2", SqlDbType.NChar).Value = address1; 
     cmd.Parameters.Add("@phoneno", SqlDbType.Int).Value = phoneno; 
     cmd.Parameters.Add("@mobileno", SqlDbType.Int).Value = mobileno; 
     cmd.Parameters.Add("@mailid", SqlDbType.NChar).Value = mailid; 
     cmd.Parameters.Add("@website", SqlDbType.NChar).Value = website; 
     cmd.Parameters.Add("@occupation", SqlDbType.NChar).Value = occupation; 
     cmd.Parameters.Add("@status", SqlDbType.Bit).Value = status; 


     cmd.CommandType = CommandType.StoredProcedure; 
     return Convert.ToBoolean(cmd.ExecuteNonQuery()); //Error 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
} 

應用程序配置:

在C#即時通訊新.net..im無法找到這個錯誤..任何人的幫助..

+0

當你說你的新程序時,你必須先閱讀MSDN /相關文章。我沒有看到使用這裏打開一個線程與閱讀有關它。 – Zenwalker

+0

您需要在完成使用後立即處置'SqlCommand'和'SqlConnection'。 – TheCodeKing

+0

[ExecuteReader可能的重複需要打開並且可用的連接。連接的當前狀態是連接](http:// stackoverflow。com/questions/9705637/executereader-requires-an-open-and-available-connection-the-connections-curren) –

回答

1

錯誤消息說出了什麼問題。連接未打開,但已關閉。

確保連接已打開。使用Open() - 方法打開連接。

順便說一句,擺脫try/catch-block。捕獲異常並重新拋出它有什麼意義?

+0

謝謝你的答覆先生.. – ggurug

0

dal.con尚未設置或打開或其他。根據錯誤消息。

+0

謝謝你的答覆先生.. – ggurug

3

您應該打開連接並關閉它。

string connectionString = ""; 
SqlConnection con = new SqlConnection(connectionString); 
con.Open(); 

//do your coding 
con.Close(); 
1

從你的代碼,你需要打開在SqlCommand的聲明中指定的連接(dal.con

你應該

dal.con.Open() 
你以前

打開它的ExecuteNonQuery但記住以後將其關閉(dal.con.Close())。

我建議改變

return Convert.ToBoolean(cmd.ExecuteNonQuery()); 

dal.con.Open(); 
bool result = Convert.ToBoolean(cmd.ExecuteNonQuery()); 
dal.con.Close(); 
return result; 
0

你能發佈關於連接字符串的更多信息?

在Webconfig試試這個:

<connectionStrings> 
    <add name="connName" connectionString="//ConnectionString here"/> 
</connectionStrings> 

在類:

public static SqlConnection GetConnection() 
{ 
    string conString = ConfigurationManager.ConnectionStrings["connName"].ConnectionString; 
    SqlConnection con = new SqlConnection(conString); 
    return con; 
} 

,而是這個:

SqlCommand cmd = new SqlCommand("Insertcustomermaster", dal.con); 
     cmd.Parameters.Add("@customercode", SqlDbType.Int).Value = customercode; 
     cmd.Parameters.Add("@customername", SqlDbType.NChar).Value = customername; 
     cmd.Parameters.Add("@address1", SqlDbType.NChar).Value = address1; 
     cmd.Parameters.Add("@address2", SqlDbType.NChar).Value = address1; 
     cmd.Parameters.Add("@phoneno", SqlDbType.Int).Value = phoneno; 
     cmd.Parameters.Add("@mobileno", SqlDbType.Int).Value = mobileno; 
     cmd.Parameters.Add("@mailid", SqlDbType.NChar).Value = mailid; 
     cmd.Parameters.Add("@website", SqlDbType.NChar).Value = website; 
     cmd.Parameters.Add("@occupation", SqlDbType.NChar).Value = occupation; 
     cmd.Parameters.Add("@status", SqlDbType.Bit).Value = status; 


     cmd.CommandType = CommandType.StoredProcedure; 
     return Convert.ToBoolean(cmd.ExecuteNonQuery()); //Error 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 

這樣做:

//Method + Insert string (Guessing you want to create a register page) 
    try 
    { 
     SqlCommand cmd = new SqlCommand(sql, GetConnection()); 
    //You don't have to point out the data type if it's just going to be filled in like that. 
     cmd.Parameters.AddWithValue("@customercode", customercode); 
     cmd.Parameters.AddWithValue("@customername", customername); 
     cmd.Parameters.AddWithValue("@address1", address1); 
     cmd.Parameters.AddWithValue("@address2", address2); 
     cmd.Parameters.AddWithValue("@phoneno", phoneno); 
     cmd.Parameters.AddWithValue("@mobileno", mobileno); 
     cmd.Parameters.AddWithValue("@mailid", mailid); 
     cmd.Parameters.AddWithValue("@website", website); 
     cmd.Parameters.AddWithValue("@occupation", occupation); 
     cmd.Parameters.AddWithValue("@status", status); 
     cmd.ExecuteNonQuery(); 
    } 
     catch (System.Data.SqlClient.SqlException ex) 
     { 
      // You can catch it with an error, or Just leave it empty 
      string msg = "Error"; 
      msg += ex.Message; 
      throw new Exception(msg); 
     } 
     //Close the connection (Not Necessary) 
     GetConnection().Close(); 
    } 
相關問題