SQL Server CE查询错误(unhandles exception).从c#执行

本文关键字:exception 执行 unhandles Server CE 查询 错误 SQL | 更新日期: 2023-09-27 18:12:47

string query = "Create table " + name + 
               " (Manpower_Name NVARCHAR(50), Instance INT, Start NVARCHAR(30), End NVARCHAR(30));";

我在c#中为SQL Server CE数据库(.sdf文件)创建了这个连接字符串。但是我得到一个错误,如下所示:

解析查询出错。[令牌行号= 1,令牌行偏移量= 77,令牌错误=结束]

从函数执行:

public void create_proj_table(string name)
{
    string query = "Create table " + name + " (Manpower_Name NVARCHAR(50), Instance INT, Start NVARCHAR(30), End NVARCHAR(30));";
    //open connection
    if (this.OpenConnection() == true)
    {
        //create command and assign the query and connection from the constructor
        SqlCeCommand cmd = new SqlCeCommand(query, connection);
        //Execute command
        cmd.ExecuteNonQuery();
        //close connection
        this.CloseConnection();
    }
}

SQL Server CE查询错误(unhandles exception).从c#执行

End是一个关键字,你不能在你自己的表中使用-使用EndDate之类的代替。

还有:我假设StartEnd是日期-我强烈建议您使用DATETIME而不是NVARCHAR(30)来存储它们!

所以我将CREATE TBALE语句改成这样:
string query =  "CREATE TABLE " + name + 
                " (Manpower_Name NVARCHAR(50), Instance INT, StartDate DATETIME, EndDate DATETIME);";

,然后你的代码应该可以正常工作

END是Sql中的保留字。

string query = "Create table " + name + " (Manpower_Name NVARCHAR(50), Instance INT, Start NVARCHAR(30), End NVARCHAR(30));";

如果你必须使用它——也就是说,你不想改变行名——用'[]'把它括起来,像这样:

string query = "Create table " + name + " (Manpower_Name NVARCHAR(50), Instance INT, Start NVARCHAR(30), [End] NVARCHAR(30));";

END是SQL CE中的保留关键字。如果你需要使用它,你应该用方括号把

string query = "Create table " + name + " (Manpower_Name NVARCHAR(50), " + 
              "Instance INT, Start NVARCHAR(30), [End] NVARCHAR(30));";