[英].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.