Как программно создать новую базу данных и новые таблицы в SQL MSDE 2000 с помощью C # .net? - PullRequest
0 голосов
/ 18 января 2012

Я пишу программу, которая создаст новую базу данных, а затем добавит таблицы в эту базу данных.Вот мой код ....

InsertTable("Create Database iBlast", "Null");
InsertTable("Create Table iBlast.tblBoreHoles (HoleID uniqueIdentifier, HoleName nvarchar(40), JobID uniqueidentifier, CreateDate datetime, Longitude float, Latitude float, Altitude float, HoleDia real, ExpectedDepth float)", "iBlast");


static void InsertTable(String sqlQuery, string InitialCatalog)
{
    SqlConnection sqlConn = new SqlConnection();
    //sqlConn.ConnectionString = "Data Source=VIRTUAL2KB;Initial Catalog=PCS6000SQL;User ID=sa;Password=password;Integrated Security=False";
    if (InitialCatalog == "Null")
    {
        sqlConn.ConnectionString = "Data Source=VEEMER11;Integrated Security=True";
    }
    else
    {
        sqlConn.ConnectionString = "Data Source=VEEMER11;Initial Catalog=" + InitialCatalog + ";Integrated Security=True";
    }   
    sqlConn.Open();
    SqlCommand sqlCommand = new SqlCommand(sqlQuery, sqlConn);
    sqlCommand.ExecuteNonQuery();
}

Создание базы данных работает нормально, но я получаю ошибку, когда код пытается создать таблицу.

Error = "Указаноимя схемы "iBlast" либо не существует, либо у вас нет разрешения на ее использование. "

Любая помощь будет принята.

Ответы [ 4 ]

3 голосов
/ 18 января 2012

Вы указываете «iBlast» в качестве исходного каталога, поэтому вам не нужно указывать его в запросе:

 InsertTable("Create Table tblBoreHoles (...)", "iBlast");

Если вам нужно указать его, синтаксис будет iBlast..tblBoreHoles или iBlast.dbo.tblBoreHoles.

2 голосов
/ 18 января 2012

В вашем случае вы не указываете базу данных с iBlast во второй строке, вы указываете схему текущей базы данных. Должно быть что-то вроде [база данных]. [Схема]. [Таблица]

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

вам нужно сделать iblast.dbo.tblBoreHoles или iBlast..tblBoreHoles.В соглашении об именах SQL, часть перед именем таблицы всегда является схемой, на которую вы не пытаетесь ссылаться с помощью «iBlast»

0 голосов
/ 18 января 2012

Попробуйте:

    else
    {
        sqlConn.ConnectionString = "Data Source=VEEMER11;Initial Catalog=" + InitialCatalog + ";Integrated Security=SSPI";
    } 

Переход на SSPI может дать вам необходимое разрешение.Проверьте на своем сервере, что ваш пользователь Windows имеет полные права DBO.

также, измените вашу вставку на:

InsertTable("Create Table tblBoreHoles (HoleID uniqueIdentifier, HoleName nvarchar(40), JobID uniqueidentifier, CreateDate datetime, Longitude float, Latitude float, Altitude float, HoleDia real, ExpectedDepth float)", "iBlast");
...