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