C#:表未在SQL Server中创建

问题描述:

我是SQL Server中的新手,当前正试图创建一个包含表内的数据库。这是数据库创建的代码。C#:表未在SQL Server中创建

if not exists(select * from sys.databases where name = 'TCPDUMP') 
    CREATE DATABASE TCPDUMP 
     ON PRIMARY (NAME = TCPDUMP, 
        FILENAME = 'P:\Visual Studio 2015\Projects\Serene5\Serene5\Serene5.Web\App_Data\TCPDUMP.mdf', 
        SIZE = 2MB, MAXSIZE = 10GB, FILEGROWTH = 10%) 
     LOG ON (NAME = TCPDUMP_Log, 
       FILENAME = 'P:\Visual Studio 2015\Projects\Serene5\Serene5\Serene5.Web\App_Data\TCPDUMP.ldf', 
       SIZE = 1MB, MAXSIZE = 5GB, FILEGROWTH = 10%) 

并且表的代码。

if not exists(select * from sys.tables where name = sample2Prot) 
    CREATE TABLE [TCPDUMP].[dbo].[sample2Prot] 
    (
     [IdTransmission] INT IDENTITY(1, 1) NOT NULL, 
     [timestp] NVARCHAR(32) NULL, 
     [idq] NVARCHAR(32) NULL, 
     [idz] NVARCHAR(32) NULL, 
     [prot] NVARCHAR(32) NULL, 
     [Lhowmany] NVARCHAR(32) NULL, 
     [Rhowmany] NVARCHAR(32) NULL, 

     CONSTRAINT[PK_TCPDump] 
      PRIMARY KEY CLUSTERED([IdTransmission] ASC) 
    ) 

然而,当我做

SELECT * FROM [TCPDUMP].[dbo].[sample2Prot] 

出现错误:

System.Data.SqlClient.SqlException:无效的对象名称sample2Prot“

我假设我在我的SQL代码中犯了一个错误,但我无法弄清楚在哪里以及为什么。有没有人有想法?

编辑:我适应我的代码,您的意见(倒置[sample2Prot].[dbo].[TCPDUMP],修正后的括号内。),但它仍然无法正常工作

+0

哪个字符串实际上包含字符串参数'{0}'?这里第二个参数“sample2Prot”的用途是什么? –

+4

您正在创建一个语法为CREATE TABLE [sample2Prot]的表。[TCPDUMP]语法应该是[Database]。[schema]。[tablename]。我会直接在SQL Server中检查你的语法,然后将它插入到C#中 – Leonidas199x

+0

它看起来像在你的查询中缺少括号。 –

从快查看,似乎数据库&表的顺序颠倒了:

CREATE TABLE [sample2Prot].[TCPDUMP] 

正确的命名以创建一个表是[数据库名] [模式名称],如下所示。[表名]dbo是SQL Server使用默认数据库对象模式):

IF NOT EXISTS (SELECT * from sys.tables where name = sample2Prot) 
    CREATE TABLE [TCPDUMP].[dbo].[sample2Prot] 
    (
     [IdTransmission] INT IDENTITY(1, 1) NOT NULL, 
     [timestp] NVARCHAR(32) NULL, 
     [idq] NVARCHAR(32) NULL, 
     [idz] NVARCHAR(32) NULL, 
     [prot] NVARCHAR(32) NULL, 
     [Lhowmany] NVARCHAR(32) NULL, 
     [Rhowmany] NVARCHAR(32) NULL, 
     CONSTRAINT [PK_TCPDump] 
     PRIMARY KEY CLUSTERED ([IdTransmission] ASC) 
    ) 

或者用USE [database_name]简单得多:

USE [TCPDUMP] 

-- CREATE TABLE sample2Prot may used directly if dbo schema used 
CREATE TABLE [dbo].[sample2Prot] 
(
    -- column & constraint declarations 
) 

SELECT语句可以配置如下:

USE [TCPDUMP] 

SELECT * FROM sample2Prot 

-- or 

SELECT * FROM [TCPDUMP].[dbo].[sample2Prot] 

您应该检查你的语法在CREATE TABLE命令。它应该是这样的:

if not exists(select * from sys.tables where name = sample2Prot) 
    CREATE TABLE [TCPDUMP].[dbo].[sample2Prot] 

签出更多的语法在这里,如果你使用一个数据库,玛 MSDN

那么你可能需要改变你的SELECT声明:

SELECT * FROM [TCPDUMP].[dbo].[sample2Prot] 
+0

您缺少架构,可以添加它或使用[TCPDUMP] .. [sample2Prot]使用默认值。 – Leonidas199x

+0

shema是一个可选值,如您在MSDN上看到的 –

+0

您是否尝试过运行代码?它会认为TCPDUMP是模式。 – Leonidas199x