2010-12-27 20 views
8

Tengo este código para crear una nueva tabla sql cuando ejecuto esto me muestra este error que está en la captura de pantalla. En mi DB no hay tal tabla. muestra este error con cualquier nombre de tabla. ¿Alguien puede ayudarme?Creando una nueva tabla de servidores sql con 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

Tiene la columna 'Descuento' llamada incorrecta, a menos que desee nombrarla 'disccount' En inglés, solo hay una 'c' en 'descuento'. –

+0

BTW, +1 para mostrar el código y el mensaje de error exacto. Este debería ser un ejemplo principal de cómo hacer una pregunta aquí. – NotMe

Respuesta

5

Usted está utilizando el mismo nombre para su mesa y su clave primaria. Pruebe en su lugar "CONSTRAINT ['pk_" + TName + "'] PRIMARY KEY CLUSTERED ".

1

El mensaje de error no parece estar relacionado con el nombre de la tabla. Parece relacionado con el nombre de la restricción. Parece que está nombrando una restricción 'beso' y otro objeto con ese nombre ya existe en su base de datos.

0

En lugar de luchar con la sintaxis SQL, también se puede utilizar Mig# así:

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

El único inconveniente de este enfoque siendo que Mig # no es adecuado para usar las características específicas muy SQL Server, ya que admite muchas plataformas de forma portátil.

Cuestiones relacionadas