我正在使用c#應用程序從tcp客戶端接收字符串。並存儲在數據庫(SQL Server 2005)。應用工作正常,但過一段時間它給錯誤executenonquery需要一個開放且可用的連接。連接的當前狀態正在連接
「的ExecuteNonQuery需要一個開放和可用的連接,該連接的當前狀態爲正在連接」
是天天再來重新啓動它工作正常申請後一段時間的誤差會
當我得到這個錯誤,我已經失去了它不是在我的數據庫存儲的代碼背後
try
{
if (Latitude != 0 && Longitude != 0)
{
SqlCommand cmd = new SqlCommand("Insert_Mapapp", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Latitude", Latitude));
cmd.Parameters.Add(new SqlParameter("@Longitude ", Longitude));
cmd.Parameters.Add(new SqlParameter("@Speed", Speed));
cmd.Parameters.Add(new SqlParameter("@Battery_ADC ", Battery_ADC));
cmd.Parameters.Add(new SqlParameter("@sDateTime ", sDateTime));
cmd.Parameters.Add(new SqlParameter("@Main_Backup_Battery ", Main_Backup_Battery));
cmd.Parameters.Add(new SqlParameter("@Pulse_Counter ", Pulse_Counter));
cmd.Parameters.Add(new SqlParameter("@Number_of_Satellites ", Number_of_Satellites));
cmd.Parameters.Add(new SqlParameter("@IgnitionStatus ", IgnitionStatus));
cmd.Parameters.Add(new SqlParameter("@Condition_Inputs ", Condition_Inputs));
cmd.Parameters.Add(new SqlParameter("@FuelADC ", FuelADC));
cmd.Parameters.Add(new SqlParameter("@UID ", UnitID));
cmd.Parameters.Add(new SqlParameter("@Device_IP", remoteIP));
cmd.Parameters.Add(new SqlParameter("@Device_Port", remotePort));
cmd.Parameters.Add(new SqlParameter("@String_Count", UIDCounter));
cmd.Parameters.Add(new SqlParameter("@Stored", Stored));
// cmd.Parameters.Add("@Nofrec", SqlDbType.Int).Direction = ParameterDirection.Output;
if (cmd.Connection.State == ConnectionState.Closed)
cmd.Connection.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
AddTextToListBox(ex.Message);
AddTextToListBox(tmp);
}
finally
{
if (con.State == ConnectionState.Open)
con.Close();
}
如何解決這個PROBL他們嗎?
這並不是說這個答案,但頂部的教訓。沒有空的catch塊。 – doctorlove 2014-08-28 08:25:58
刪除空捕獲,也使用'using'語句關閉連接。請注意,除ConnectionState.Open和ConnectionState.Closed外,還有其他狀態。 – 2014-08-28 08:28:10
您需要檢查連接狀態的原因是什麼?是不是打開並在您的方法中使用另一個使用語句處理?沒有理由檢查,只需打開()... – 2014-08-28 08:29:16