“解析查询时出错.SQL Server CE

时间:2012-02-03 04:02:18

标签: c# sql-server-ce

我在C#中编写了一个小应用程序来跟踪客户和工作,但我收到错误

  

“解析查询时出错。[令牌行号= 1,令牌   line offset = 14,Token in error =']

我正在使用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();
        }
    }

我经常研究错误,看起来这个错误很模糊

2 个答案:

答案 0 :(得分:3)

您不能以这种方式参数化CREATE表语句。

只需使用字符串连接(注意可能的SQL注入漏洞)在代码中构造CommandText字符串并执行它。

答案 1 :(得分:0)

您无法在示例中参数化表名。我更改了您的create table SQL以符合SQL CE支持的数据类型。请注意,NVARCHAR语句的长度设置为100,最多可支持您指定的50个字符(不支持VARCHAR)。

我测试了这个代码示例,但还有一些事情需要考虑:

  1. 您的方法目前已公开。我不知道你在调用它的上下文,但考虑将其设为私有或内部。
  2. 首先考虑查询以确定表是否已存在以避免异常。
  3. 如果可能的话,我会在命令创建的正上方的using块中创建连接。这样你就会知道连接被关闭和处理掉了。我会自行决定。

    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()
        }            
    }