2010-12-27 3 views
8

У меня есть этот код для создания новой таблицы sql , когда я выполняю это, это показывает мне эту ошибку, которая находится на скриншоте. В моем db нет такой таблицы. он показывает эту ошибку для любого имени таблицы. Может кто-нибудь мне помочь?Создание новой таблицы сервера sql с C#

public void Create(string TName, string ConString) 
    { 
     try 
     { 
      using (SqlCommand cmd = new SqlCommand("CREATE TABLE [dbo].['" + TName + "'](" 
          + "[ID] [int] IDENTITY(1,1) NOT NULL," 
          + "[DateTime] [date] NOT NULL," 
          + "[BarCode] [nvarchar](max) NOT NULL," 
          + "[ArtNumber] [nvarchar](max) NOT NULL," 
          + "[ProductName] [nvarchar](50) NOT NULL," 
          + "[Quantity] [int] NOT NULL," 
          + "[SelfPrice] [decimal](18, 2) NOT NULL," 
          + "[Price] [decimal](18, 2) NOT NULL," 
          + "[Disccount] [int] NULL," 
          + "[Comment] [nvarchar](max) NULL," 
          + "CONSTRAINT ['" + TName + "'] PRIMARY KEY CLUSTERED " 
          + "(" 
          + "[ID] ASC" 
          + ")WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]" 
          + ") ON [PRIMARY]", new SqlConnection(ConString))) 
      { 
       cmd.Connection.Open(); 
       cmd.ExecuteNonQuery(); 
       cmd.Connection.Close(); 
      } 
     } 
     catch (Exception) 
     { 

      throw; 
     } 
    } 

alt text

+2

У вас есть столбец «Скидка» с неправильным именем, если вы не намеревались называть его «disccount». На английском языке есть только один «c» в «скидке». –

+0

BTW, +1 для отображения кода и точного сообщения об ошибке. Это должно быть основным примером того, как задать вопрос здесь. – NotMe

ответ

5

Вы используете один и тот же имя для таблицы и ее первичный ключ. Попробуйте вместо этого "CONSTRAINT ['pk_" + TName + "'] PRIMARY KEY CLUSTERED ".

1

Сообщение об ошибке, похоже, не связано с именем таблицы. Кажется, это связано с именем ограничения. Похоже, вы называете ограничение «beso», а другой объект с таким именем уже существует в вашей базе данных.

0

Вместо того, чтобы бороться с синтаксисом SQL, вы можете также использовать Mig# так:

 var schema = new DbSchema(ConnectionString, DbPlatform.SqlServer2014); 
     schema.Alter(db => db.CreateTable(TName) 
      .WithPrimaryKeyColumn("Id", DbType.Int32).AsIdentity() 
      .WithNotNullableColumn("DateTime", DbType.Date) 
      ...); 

только вниз сторона этого подхода в том, что Mig # не подходит для использования в очень SQL специфических функций сервера как это поддерживает многие платформы в переносном режиме.

Смежные вопросы