Команда SQL работает в SSMS, а не через C # SqlCommand - PullRequest
0 голосов
/ 29 декабря 2011

Если я запускаю следующее в SSMS, таблица создается, если она не существует.Однако в моем коде 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();
                                }
                            }
                        }

Ответы [ 3 ]

1 голос
/ 29 декабря 2011

Убедитесь, что при установлении соединения с базой данных вы указали правильную базу данных или сначала изменили базу данных соединения. В противном случае ваши объекты окажутся в базе данных MASTER.

1 голос
/ 29 декабря 2011

Попробуйте это:

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 голосов
/ 22 января 2014

Вы не можете использовать sys.objects через SQLCommand. Доступ специально заблокирован в целях безопасности в SQL Server. Я не уверен, является ли это настройкой по умолчанию или что-то, что нельзя перезаписать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...