0

我正在编写一个程序,它将创建一个新的数据库,然后将表添加到该数据库。这是我的代码....

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();
}

数据库创建工作正常,但是当代码尝试创建表时出现错误。

错误 = “指定的架构名称“iBlast”不存在,或者您没有使用它的权限。”

任何帮助,将不胜感激。

4

4 回答 4

3

您将“iBlast”指定为初始目录,因此您无需在查询中指定它:

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

如果您确实需要指定它,则语法为iBlast..tblBoreHolesor iBlast.dbo.tblBoreHoles

于 2012-01-18T15:35:38.160 回答
2

在您的情况下,您没有在第二行使用 iBlast 指定数据库,而是指定了当前数据库的架构。应该类似于 [database].[schema].[table]

于 2012-01-18T15:35:58.327 回答
1

你需要做 iblast.dbo.tblBoreHoles 或 iBlast..tblBoreHoles。在 SQL 的命名约定中,表名之前的部分始终是模式,它不会出现在您试图用“iBlast”引用的情况下

于 2012-01-18T15:34:53.647 回答
0

试试这个:

    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");
于 2012-01-18T15:37:05.587 回答