2011-12-29 72 views
0

如果我在SSMS中運行以下內容,表將在不存在時創建。但是,在我的SQLCommand代碼中,它連接併發送查詢,但沒有錯誤,但不會創建表(如果不存在)。有任何想法嗎?SQL命令在SSMS中工作,而不是通過C#SqlCommand

string[] tables = new string[6]; 
    tables[0] += ("IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[AD_Authorization]') AND type in (N'U')) " + 
        "CREATE TABLE [AD_Authorization]([ID] [bigint] IDENTITY(1,1) NOT NULL, " + 
        " [AD_Account] [varchar](255) NOT NULL, " + 
        " [AD_SID] [varchar](255) NOT NULL, " + 
        " [AD_EmailAddress] [varchar](255) NULL, " + 
        " [DateImported] [datetime] NOT NULL, " + 
        " [Active] [bit] NULL) ON [PRIMARY]"); 

for (int i = 0; i <= 5; i++) 
         { 
          using (SqlConnection connection = new SqlConnection(ConnectionString)) 
          { 
           using (SqlCommand cmd = new SqlCommand(tables[i], connection)) 
           { 
            connection.Open(); 
            cmd.CommandType = CommandType.Text; 
            cmd.ExecuteNonQuery(); 
            connection.Close(); 
           } 
          } 
         } 
+0

是否可以下到您正在使用的用戶通過代碼與您在SSMS中登錄的用戶不同? 如果他們不同嘗試連接作爲你在你的項目中使用的同一用戶,然後看... – 2011-12-29 16:41:40

+0

另外:我總是會使用更精確和集中的'sys.tables'而不是'sys.objects'(和有以指定您感興趣的對象的類型) - 'IF NOT EXISTS(SELECT * FROM sys.tables WHERE Name ='AD_Authorization')....' - 但我懷疑這會產生什麼影響 – 2011-12-29 16:44:56

+0

用full碼。 – 2011-12-29 16:54:37

回答

1

確保當您對數據庫的連接,您指定正確的數據庫,或者你先ChangeDatabase的連接。否則,你的對象將會在MASTER數據庫中結束。

1

試試這個:

SqlConnection DbConn = new SqlConnection(YourConnectionStringHere); 
SqlCommand CreateTable = new SqlCommand(); 
CreateTable.Connection = DbConn; 
CreateTable.CommandText = "IF NOT EXISTS 
    (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[AD_Authorization]') 
    AND type in (N'U')) 
     CREATE TABLE [AD_Authorization] 
     (
      [ID] [bigint] IDENTITY(1,1) NOT NULL, 
      [AD_Account] [varchar](255) NOT NULL, 
      [AD_SID] [varchar](255) NOT NULL, 
      [AD_EmailAddress] [varchar](255) NULL, 
      [DateImported] [datetime] NOT NULL,[Active] [bit] NULL 
     ) 
     ON [PRIMARY]"; 

try 
{ 
    DbConn.Open(); 
    CreateTable.ExecuteNonQuery(); 
} 
catch (Exception ex) 
{ 
    DbConn.Dispose(); 
    // Handle your error 
} 
0

您不能通過SQLCommand使用sys.objects。在SQL Server中出於安全目的特定阻止訪問。我不確定這是否是默認設置,或者是不能被覆蓋的內容。

相關問題