2012-02-03 77 views
2

我在C#寫了一個小程序來跟蹤客戶和作業的錯誤,但我得到一個錯誤「有分析查詢。SQL Server CE的

」有分析查詢出錯。[令牌行號= 1,令牌 行偏移= 14,令牌在錯誤=「]

我使用SQL Server CE .sdf數據庫

public static void CreateEmployeeTable(string name) 
    { 
     conn.Open(); 
     using (SqlCeCommand cmd = conn.CreateCommand()) 
     { 
      cmd.CommandText = @"CREATE TABLE `@Name` (
           `Id` INT(10) NOT NULL AUTO_INCREMENT, 
           `Job` VARCHAR(50) NULL, 
           `Pay` VARCHAR(50) NULL, 
           `TotalJobs` VARCHAR(50) NULL, 
           `TotalPay` VARCHAR(50) NULL, 
           PRIMARY KEY (`Id`)"; 
      cmd.Parameters.AddWithValue("@Name", name); 
      cmd.ExecuteNonQuery(); 
     } 
    } 

我RESE拱形的錯誤很多,而且似乎這個錯誤是相當模糊的

回答

3

你不能參數化一個CREATE表聲明的方式。

使用字符串連接(小心可能的SQL注入漏洞)簡單地構建CommandText字符串中的代碼並執行它。

0

你不能在你的榜樣參數表名。我更改了創建表SQL以符合SQL CE支持的數據類型。請注意,NVARCHAR語句的長度設置爲100,最多可支持您指定的50個字符(不支持VARCHAR)。

我測試此代碼示例,但也有一對夫婦更多的事情要考慮:

  1. 你的方法是目前公衆。我不知道你在調用這個環境的背景,但考慮將其設置爲私人或內部。
  2. 首先考慮查詢以確定表是否已經存在以避免發生異常。
  3. 如果可能的話我會直接創建您的命令上面創建一個使用塊的連接。這樣你就會知道連接被關閉和處置。我會留下你的決定權。

    public static void CreateEmployeeTable(string name) 
    { 
        const string createTableFormat = @"CREATE TABLE [{0}] ( 
             Id INT IDENTITY NOT NULL PRIMARY KEY, 
             Job NVARCHAR(100) NULL, 
             Pay NVARCHAR(100) NULL, 
             TotalJobs NVARCHAR(100) NULL, 
             TotalPay NVARCHAR(100) NULL)"; 
        if (string.IsNullOrEmpty(name)) 
        { 
         throw new ArgumentNullException("name"); 
        } 
    
        // Just replace with your connection string. 
        using (SqlCeConnection cn = new SqlCeConnection(Settings.Default.LocalDbConnectionString))      
        using (SqlCeCommand cmd = cn.CreateCommand()) 
        {      
         cmd.CommandText = string.Format(createTableFormat, name); 
         cn.Open();   
         cmd.ExecuteNonQuery() 
        }    
    }