【问题标题】:How do I create a new Database and new tables in SQL MSDE 2000 programmatically with C#.net?如何使用 C#.net 以编程方式在 SQL MSDE 2000 中创建新数据库和新表?
【发布时间】:2012-01-18 15:31:39
【问题描述】:

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

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”要么不存在,要么 你没有使用它的权限。”

任何帮助将不胜感激。

【问题讨论】:

  • 您为什么使用 MSDE 2000 而不是 SQL Express?
  • 程序在只运行 Windows 2000 的 PLC 上运行。

标签: c# sql msde


【解决方案1】:

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

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

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

【讨论】:

  • 我最初忽略了它,但遇到了同样的错误。这就是我添加它的原因。那是因为该函数将添加数据库和表。但是,iBlast.dbo.tblBoreHoles... 起作用了。谢谢,我觉得我自己没有意识到这一点很愚蠢!
【解决方案2】:

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

【讨论】:

  • 我无法将两个答案标记为正确答案,但这也是正确答案...谢谢
【解决方案3】:

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

【讨论】:

  • 我无法将两个答案标记为正确答案,但这也是正确答案...谢谢。
【解决方案4】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2010-10-07
    • 2012-06-09
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多