Простая функция для создания ошибок базы данных SQL: что не так? - PullRequest
0 голосов
/ 18 февраля 2012

У меня есть простая функция C #, которая должна создать новую базу данных Microsoft SQL с именем Database2.mdf.

Моя проблема: Функция не может создать базу данных, и я не уверен, почему?Я скопировал код из MSDN, который демонстрирует, как создать базу данных, но я не уверен, что моя строка SqlConnection или мои строки SQLCommand правильные?

Возникла ошибка:

{«При установке соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не был найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений. (Поставщик:Поставщик именованных каналов, ошибка: 40 - Не удалось открыть соединение с SQL Server) "}

Мой код:

    public static string DEF_DB_NAME = "Database2";
    private bool create()
    {
        Console.WriteLine("populating data");
        bool res = false;
        SqlConnection myConn = new SqlConnection("Server=localhost;Integrated security=SSPI;database=master");
        string str = "CREATE DATABASE "+DEF_DB_NAME+" ON PRIMARY " +
            "(NAME = .\\SQLEXPRESS, " +
            "FILENAME = " + DEF_DB_NAME + ".mdf', " +
            "SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +
            "LOG ON (NAME = " + DEF_DB_NAME + "_Log, " +
            "FILENAME = " + DEF_DB_NAME + "Log.ldf', " +
            "SIZE = 1MB, " +
            "MAXSIZE = 5MB, " +
            "FILEGROWTH = 10%)";

        SqlCommand myCommand = new SqlCommand(str, myConn);
        myConn.Open();  // ERROR OCCURS HERE
        myCommand.ExecuteNonQuery();
        insertDefData(myConn);
        myConn.Close();
        res = true;

        return res;
    }

Ответы [ 2 ]

1 голос
/ 18 февраля 2012

Ваше CREATE DATABASE утверждение должно быть:

        string str = "CREATE DATABASE " + DEF_DB_NAME + " ON PRIMARY " +
            "(NAME = N'" + DEF_DB_NAME + "_Dat', " +
            "FILENAME = 'C:\\somepath\\" + DEF_DB_NAME + ".mdf', " +
            "SIZE = 10MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +
            "LOG ON (NAME = N'" + DEF_DB_NAME + "_Log', " +
            "FILENAME = 'C:\\somepath\\" + DEF_DB_NAME + "Log.ldf', " +
            "SIZE = 1MB, " +
            "MAXSIZE = 5MB, " +
            "FILEGROWTH = 10%)";

Проверено и работает на 100%.(Вы пропускали кавычки в нескольких местах)

Возможно, вам потребуется увеличить начальный размер файла данных в зависимости от размера базы данных вашей модели.(Мне пришлось увеличить указанный размер> 3 МБ на моем ПК)

Путь к файлам базы данных по умолчанию: C:\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\ [Если это производственная база данных, файл журнала и данных должен быть другим (и соответствующимУровень RAID) диски ...]

1 голос
/ 18 февраля 2012

Ваша проблема не в том, что команда не выполняется и БД не создается. Вы не подключаете к БД, чтобы выполнить команду в первую очередь.Что-то не так с вашей строкой соединения и, возможно, именем сервера (или самого сервера).

Согласно вашему сценарию create db имя сервера выглядит следующим образом. \ SQLEXPRESS Настройте строку подключения соответствующим образом:

SqlConnection myConn = new SqlConnection(@"Server=.\SQLEXPRESS ;Integrated security=SSPI;database=master");

Проверьте здесь для получения дополнительной информации ,но вот что нужно проверить:

  • Ваш серверный экземпляр по умолчанию?Если нет, то он называется, и имя сервера в строке conn должно выглядеть примерно так: .\SQLEXPRESS
  • Ваш сервер настроен для разрешения удаленных подключений?(прочитайте сообщение об ошибке)
  • Дополнительные строки подключения, которые необходимо попробовать:
    • Server=.;Database=master;Trusted_Connection=True;
    • Server=(local);Database=master;Trusted_Connection=True;
    • Server=127.0.0.1;Database=master;Trusted_Connection=True;
  • и ... ваш SQL Server работает?

Также проанализируйте ошибку:

  • Ошибка, связанная с сетью или экземпляромпроизошла при установлении соединения с SQL Server.
  • Сервер не найден или недоступен.
  • Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений.
  • (поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server) "}

Не предполагайте, что команда не работает. Ошибкапрямо говорится, что это проблема соединения, а не синтаксиса SQL или другой подобной проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...