2017-08-10 42 views
0

我是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

它看起來像在你的查詢中缺少括號。 –

回答

1

從快查看,似乎數據庫&表的順序顛倒了:

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] 
1

您應該檢查你的語法在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