如何使用C#.net以编程方式在SQL MSDE 2000中创建新数据库和新表

本文关键字:创建 2000 数据库 新表 MSDE SQL net 何使用 编程 方式 | 更新日期: 2023-09-27 18:20:53

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

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"不存在或您没有权限使用它。"

如有任何帮助,我们将不胜感激。

如何使用C#.net以编程方式在SQL MSDE 2000中创建新数据库和新表

您将"iBlast"指定为初始目录,因此不需要在查询中指定它:

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

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

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

您需要执行iblast.dbo.tblBoreHoles或iblast。。tbl钻孔。在SQL的命名约定中,表名之前的部分始终是模式,您似乎不会试图用"iBlast"引用该模式

试试这个:

    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");