我在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();
}
}
我经常研究错误,看起来这个错误很模糊
答案 0 :(得分:3)
您不能以这种方式参数化CREATE
表语句。
只需使用字符串连接(注意可能的SQL注入漏洞)在代码中构造CommandText
字符串并执行它。
答案 1 :(得分:0)
您无法在示例中参数化表名。我更改了您的create table SQL以符合SQL CE支持的数据类型。请注意,NVARCHAR语句的长度设置为100,最多可支持您指定的50个字符(不支持VARCHAR)。
我测试了这个代码示例,但还有一些事情需要考虑:
如果可能的话,我会在命令创建的正上方的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()
}
}