Tiwari A K Ответов: 1

Проблема подключения к базе данных ASP.NET


public DBCon()
{
   ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DataCon"].ConnectionString;
}

private void connect()
{
   try
   {
      con = new SqlConnection(ConnectionString);
      if (con.State == ConnectionState.Open)
         con.Close();
      con.Open();
   }
   catch { }
}

public bool ExecuteNonQuery(String sql)
{
   bool Check = false;
   try
   {
      cmd = new SqlCommand();
      cmd.CommandText = sql;
      cmd.CommandType = CommandType.Text;
      connect();
      cmd.Connection = con;
      if (cmd.ExecuteNonQuery() > 0)
         Check = true;
   }
   catch
   {
      Check = false;
   }
   finally
   {
      con.Close();
      cmd.Dispose();
      cmd = null;
   }
   return Check;
}

connectionString="Data Source=amit-pc\\sqlexpress;Initial Catalog=KasturiNaturals;Persist Security Info=True;User ID=sa;Password=123456;"

когда я запускаю этот код, я получаю эту ошибку.

ServerVersion = 'con.ServerVersion' threw an exception of type 'System.InvalidOperationException'


Что я уже пробовал:

я пытаюсь создать методы, упрощающие мой код для доступа к базе данных.

RedDk

Почему ты обманываешь.Close (), затем con.Откройте() после того, как вы проверите, есть ли con.Состояние-это (==) ConnectionState.open? Разве это не было бы безопасно, если бы ConnectionState.Закрыто было условие тогда просто кон.Открыть() результат "попытки"?

Richard Deeming

Этот класс заставит вас написать код, который уязвим для SQL-инъекций. Вам нужно предоставить способ передачи параметров вашим запросам, не вставляя значения в текст запроса.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]

1 Ответов

Рейтинг:
4

Vincent Maverick Durano

Ваш код не имеет смысла. В вашем коде есть несколько блоков try-catch, которые не нужны, и вам не нужно вручную закрывать и удалять соединение. Просто используйте Оператор using чтобы автоматически закрывать и утилизировать объект, который потребляет ресурсы, такие как SqlConnection и SqlCommand. Если вы пытаетесь создать метод, который выполняет команду запроса, то вы можете просто сделать что-то вроде этого:

private static void ExecuteCommand(string sqlString,
    string connectionString)
{
    using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        using(SqlCommand command = new SqlCommand(sqlString, connection))
        {
              command.Connection.Open();
              command.ExecuteNonQuery();
        }
    }
}


Затем вы можете просто вызвать метод ExecuteCommand, передав свой sql-оператор и connectionstring:

ExecuteCommand("YourSqlStatement","YourConnectionString");



Конечно, вы все еще можете рефакторировать код, чтобы вызвать свой ConnectionString внутренне, так что вам не нужно передавать значение строки подключения каждый раз, когда вы вызываете ExcuteCommand метод.