Ошибка версии сервера при попытке подключиться к Heidisql - PullRequest
0 голосов
/ 30 марта 2020

Я должен подключить одну базу данных из HeidiSql к моему. Net проекту в Visual Studio. Когда я отлаживаю свой проект во время соединения с db, я получаю ошибку в поле Server Version с описанием «.server Version сгенерировала исключение типа System.InvalidOperationException». Знаете ли вы, в чем причина?

Моя строка подключения:

<connectionStrings>
    <add name="TicketDB"
     connectionString="server=localhost;user id=root;password=Omega;database=crm6"
     providerName="MySql.Data.MySqlClient" />
</connectionStrings> 

Код:

public void getNumberAllTicketOpen()
    {

        try
        {
            clDataBase ticketDB = new clDataBase();

            string sQuery = "SELECT * from ticket";
            DataTable ticket = ticketDB.ExecuteDataTable(sQuery, null, false);
            Console.WriteLine("i am here!");

        }
        catch (Exception e)
        {

            Console.WriteLine("Errore : " + e.Message);
        }
        finally
        {

        }

    }

public DataTable ExecuteDataTable(string CommandText, List<SqlParameter> Params = null, bool isStoredProcedure = true)
        {
            SqlConnection oCnn = null;
            SqlCommand oCmd = null;
            SqlDataAdapter oAdap = null;
            try
            {
                **oCnn = new SqlConnection(this.connectionString);
                oCnn.Open();**  //this is the line that launch the error

                oCmd = new SqlCommand(CommandText, oCnn);
                if (isStoredProcedure)
                    oCmd.CommandType = System.Data.CommandType.StoredProcedure;
                else
                    oCmd.CommandType = System.Data.CommandType.Text;

                oCmd.CommandTimeout = this.commandTimeOut;

                if (Params != null)
                {
                    foreach (SqlParameter p in Params)
                        oCmd.Parameters.Add(p);
                }

                oAdap = new SqlDataAdapter(oCmd);
                DataTable ResultTable = new DataTable();
                oAdap.Fill(ResultTable);


                return ResultTable;
            }
            catch (Exception ex)
            {
                logger.Error("Errore esecuzione " + CommandText, ex, MethodInfo.GetCurrentMethod().Name + " in " + MethodInfo.GetCurrentMethod().Module.Assembly.FullName);
                throw;
            }
}

oCnn = new SqlConnection (this .connectionString); oCnn.Open (); // это строка с ошибкой Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Я решил мою проблему. Я пытался подключиться к базе данных mySQL, но в моем коде произошла ошибка. Я решил с установкой пакета MySql .Data с NuGet и заменой в коде SqlConnection, SqlCommand, SqlDataAdapter соответственно с MysqlConnection, MySqlCommand, MySqlDataAdapter. Ниже я пишу модифицированный код:

  public DataTable ExecuteDataTable(string CommandText, List<MySqlParameter> Params = null, bool isStoredProcedure = true)
        {
            MySqlConnection oCnn = null;
            MySqlCommand oCmd = null;
            MySqlDataAdapter oAdap = null;
            try
            {
                oCnn = new MySqlConnection(this.connectionString);
                oCnn.Open();

                oCmd = new MySqlCommand(CommandText, oCnn);
                if (isStoredProcedure)
                    oCmd.CommandType = System.Data.CommandType.StoredProcedure;
                else
                    oCmd.CommandType = System.Data.CommandType.Text;

                oCmd.CommandTimeout = this.commandTimeOut;

                if (Params != null)
                {
                    foreach (MySqlParameter p in Params)
                        oCmd.Parameters.Add(p);
                }

                oAdap = new MySqlDataAdapter(oCmd);
                DataTable ResultTable = new DataTable();
                oAdap.Fill(ResultTable);


                return ResultTable;
            }
            catch (Exception ex)
            {
                logger.Error("Errore esecuzione " + CommandText, ex, MethodInfo.GetCurrentMethod().Name + " in " + MethodInfo.GetCurrentMethod().Module.Assembly.FullName);
                throw;
            }
            finally
            {
                if (oCnn != null)
                {
                    if (oCnn.State != System.Data.ConnectionState.Closed)
                        oCnn.Close();
                    oCnn.Dispose();
                }

                if (oAdap != null)
                    oAdap.Dispose();

                if (oCmd != null)
                    oCmd.Dispose();

                if (Params != null)
                {
                    Params.Clear();
                    Params = null;
                }
            }
0 голосов
/ 31 марта 2020

Отображаемая ошибка - ошибка, с которой сталкивается отладчик Visual Studio при попытке просмотра свойства объекта SqlConnection.

Рассматриваемое свойство - ServerVersion. Я предполагаю, что соединение будет знать, какая версия MySQL работает на сервере, когда ему действительно удается подключиться к серверу, но в тот момент, когда вы остановили код, оно еще не подключилось. Не имеет смысла возвращать версию сервера в этот момент, поэтому выбрасывание InvalidOperationException является подходящим ответом.

Я часто вижу подобные исключения в отладчике VS. Им не о чем беспокоиться. Не все свойства каждого объекта действительны все время.

...