2011-12-29 2 views
0

SSMS에서 다음을 실행하면 테이블이 존재하지 않으면 테이블이 만들어집니다. 그러나, 내 SQLCommand 코드에서 연결 및 오류없이 쿼리를 보냅니다 있지만 존재하지 않는 경우 테이블을 만들지 않습니다. 어떤 아이디어?SQL 명령은 C# SqlCommand가 아닌 SSMS에서 작동합니다.

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에서 로그인 한 사용자와 다른 코드를 사용하여이 사용자를 실행할 수 있습니까? 다를 경우 프로젝트 내에서 사용하는 동일한 사용자로 연결을 시도한 후 ... –

+0

또한 : 나는 항상 sys.objects가 아닌보다 정확하고 집중된'sys.tables'를 사용할 것입니다. - 당신이 관심있는 어떤 유형의 객체를 지정하는지) - '존재하지 않는다면 (SELECT * FRAME 이름 ='AD_Authorization ') .... - 그러나 이것이 어떤 차이를 만들지는 모르겠다. –

+0

전체 편집 됨 암호. –

답변

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의 보안을 위해 특별히 차단됩니다. 이것이 기본 설정인지 또는 덮어 쓸 수없는 것인지 확실하지 않습니다.

관련 문제