2010-12-27 13 views
8

Mam ten kod, aby utworzyć nową tabelę sql , gdy wykonuję to jej pokazuje mi ten błąd, który jest na zrzucie ekranu. W mojej bazie nie ma takiego stołu. pokazuje ten błąd dowolną nazwę tabeli. czy ktoś może mi pomóc?Tworzenie nowej tabeli serwera sql za pomocą 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

Kolumna "Rabat" jest błędna, o ile nie ma zamiaru nazywać jej "disccount". W języku angielskim w "rabacie" jest tylko jeden znak "c". –

+0

BTW, +1 za wyświetlenie kodu i dokładny komunikat o błędzie. To powinien być podstawowy przykład tego, jak zadać pytanie tutaj. – NotMe

Odpowiedz

5

Używasz tej samej nazwy dla tabeli i jej klucz podstawowy. Spróbuj zamiast tego "CONSTRAINT ['pk_" + TName + "'] PRIMARY KEY CLUSTERED ".

1

Komunikat o błędzie nie jest związany z nazwą tabeli. Wydaje się być związany z nazwą ograniczenia. Wygląda na to, że nazywasz ograniczenie "beso", a inny obiekt o tej nazwie już istnieje w twoim DB.

0

Zamiast walczyć ze składni SQL, można również użyć Mig# takiego:

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

Tylko w dół po stronie tego podejścia będącego że Mig # nie nadaje się do wykorzystania bardzo SQL specyficzne funkcje serwera, jak to obsługuje wiele platform w sposób przenośny.

Powiązane problemy