class CommonConnection
{
public class dStructure
{
public static string ConnectionString = "";
}
public SqlConnection Conn;
#region "Connection Procedures"
public string ConnectionString
{
get
{
string sConn = string.Empty;
sConn = @"Server=ServerName;Initial Catalog=Database;User ID=userid;Password=password;";
dStructure.ConnectionString = sConn;
return dStructure.ConnectionString;
}
}
public void cnOpen()
{
try
{
if (Conn == null)
{
Conn = new System.Data.SqlClient.SqlConnection();
}
if (Conn.State == ConnectionState.Open)
{
Conn.Close();
}
Conn.ConnectionString = ConnectionString;
Conn.Open();
}
catch (SqlException e)
{
SqlConnection.ClearAllPools();
throw e;
}
catch (Exception ex)
{
throw ex;
}
}
public void cnClose()
{
try
{
if ((Conn != null))
{
if (Conn.State == ConnectionState.Open)
{
Conn.Close();
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
Conn = null;
}
}
#endregion
public int ExecuteQuery(string strQuery, Int16 TimeOut = 30)
{
int RecordsAffected;
SqlCommand cmd;
try
{
cnOpen();
cmd = new SqlCommand(strQuery, Conn);
cmd.CommandTimeout = TimeOut;
RecordsAffected = cmd.ExecuteNonQuery();
return RecordsAffected;
}
catch (Exception ex)
{
throw ex;
}
finally
{
cnClose();
cmd = null;
}
}
}
// Пробовал еще один вариант, как показано ниже,В то время как больше выполнения запроса, я получил «Не разрешено изменять свойство« ConnectionString ».
public int ExecuteQuery(string strQuery, short TimeOut = 10)
{
SqlConnection NewConn = new SqlConnection();
try
{
if (NewConn == null)
{
NewConn = new System.Data.SqlClient.SqlConnection();
}
if (NewConn.State == ConnectionState.Open)
{
NewConn.Close();
}
NewConn.ConnectionString = "Server=ServerName;Initial Catalog=Database;User ID=userid;Password=password;";
NewConn.Open();
return new SqlCommand(strQuery, NewConn)
{
CommandTimeout = ((int)TimeOut)
}.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
NewConn.Close();
}
}
Но все еще получаю тот же вопрос. Его настольное приложение, многопоточное. Но в то время как больше нагрузки запроса на это, я получаю Не разрешено изменять свойство «ConnectionString». Текущее состояние соединения открыто. Обратите внимание, что не каждый раз я получаю эту проблему, только когда выполняется больше запросов.
// Обновление 2 Как и в другом вопросе, я пробовал использовать код ниже, но проблема остается такой же.
public int ExecuteQuery(string strQuery, short TimeOut = 10)
{
int executeReader = 0;
try
{
using (SqlConnection connection = new SqlConnection(@"Server=Server;Initial Catalog=DB;User ID=id;Password=Password;"))
{
try
{
connection.Open();
SqlCommand command = new SqlCommand(strQuery, connection);
command.CommandType = CommandType.Text;
command.CommandTimeout = TimeOut;
executeReader = command.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
}
return executeReader;
}
catch (Exception ex)
{
throw ex;
}
}
Как предлагалось, используя команду, используемую по умолчанию IDisposable, поэтому не нужно закрывать соединение.
Вы пробовали просто «новый SqlConnection (« ... connection string ... »);'? –
Также указывается точное место, где вы получаете исключение, так как изменение свойства строки соединения объекта SqlConnection разрешено. –
И код излишне свернутый. Сначала вы создаете новый объект SqlConnection, затем вводите try/catch, где вы проверяете, является ли переменная нулевой, той, на которую вы просто ввели ссылку на объект, поэтому этого не может быть. Затем вы проверяете, открыто ли соединение, но поскольку он был только что сконструирован, он будет закрыт. Затем вы устанавливаете строку подключения и открываете ее. Можете ли вы упростить код и определить точное место, где вы получаете свое исключение? –