2012-02-03 76 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() 
        }    
    }