繁体   English   中英

.NET,C#,SQL Server:带有CREATE TABLE语句的无效对象名称

[英].NET, C#, SQL Server: Invalid object name with CREATE TABLE statement

我正在尝试执行一个CREATE TABLE,导致以下SQL异常:

无效的对象名称“ UserLock”。

该语句如下所示:

USE [db]
GO

CREATE TABLE [db].[dbo].[UserLock] (
    [Login] [varchar](150) NOT NULL,
    [ExpirationDate] [datetime] NOT NULL,
    CONSTRAINT [PK_UserLock] PRIMARY KEY CLUSTERED
    ([Login] ASC)
    WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

奇怪的是,我可以用相同的用户在Microsoft SQL Management Studio中成功运行查询,但不能在用C#编写的.NET Web应用程序中运行查询。 我没有使用任何框架,而是使用System.Data.SqlClient中提供的类连接到数据库。 所有其他数据库查询均在该应用程序内运行。 该数据库是Microsoft SQL Express 2005。

-编辑-

这是我的执行代码如下所示:

    string createString = "CREATE TABLE [" + catalog + "].[dbo].[UserLock]("
                        + "  [Login] [varchar](150) NOT NULL,"
                        + "  [ExpirationDate] [datetime] NOT NULL,"
                        + "  CONSTRAINT [PK_UserLock] PRIMARY KEY CLUSTERED "
                        + "  ([Login] ASC)"
                        + "  WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]"
                        + ") ON [PRIMARY]";

    SqlCommand createCommand = connection.CreateCommand();
    createCommand.Connection = connection;
    createCommand.CommandText = createString;

    selectCommand.ExecuteNonQuery();

我用另一种方法捕获异常。 SQL连接本身也可以通过其他方法进行设置。 这是标准的SqlConnection connection = new SqlConnection(connectionString);

我不确定您如何执行上述SQL,但要知道GO并不是SQL关键字,它是一个告诉SQL Management Studio执行当前批处理的命令。 IE,您不能在SQL Management Studio之外使用GO。 我也看不到如何使用GO会导致上述错误。 最好是发布失败的整个c#代码,因为该错误可能在其他地方。

您可以完全删除以下代码:

USE [db] GO

您已经使用[Database]。[Schema]。[ObjectName]完全限定了create table语句,因此无论如何它将在正确的数据库和模式中创建表。

另外,您不应该在C#中使用GO ,因为它特定于SQL Mgmt Studio,并且用于分隔成批SQL语句。 如果您确实必须使用GO那么请看一下Sql Server管理对象类。

乔恩·加洛韦(Jon Galloway)有一篇不错的博客文章

如果重命名表名? 那它有用吗,可能是一个受保护的词。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM