【问题标题】:SQL DELETE - Error Parsing the QuerySQL DELETE - 解析查询时出错
【发布时间】:2013-11-12 15:29:43
【问题描述】:

我正在开发一个与 Compact SQL Server (.sdf) 接口的小型支出/收入跟踪 C# 控制台程序。数据库存储费用,简单的命令行输入允许用户根据数据库中的索引号删除条目。这是我遇到的错误。

"解析查询时出错。[Token line number = 1,Token line offset = 32,Token in error = Index]"

以下是删除条目的代码。

else if (ans.Equals("REMOVE"))
        {
            Console.WriteLine("Which entry?");
            deleteTrans(Console.ReadLine(), conn);
            displayDB(conn);
        }
}

static void deleteTrans(string index, SqlCeConnection conn)
    {

        SqlCeCommand deleteCmd = new SqlCeCommand("DELETE FROM Transactions WHERE Index=" + index, conn);
        try
        {
            deleteCmd.ExecuteNonQuery();
        }
        catch (SqlCeException ex)
        {
            Console.WriteLine("You failed!\n" + ex.Message);
        }

    }

数据库有 5 列(日期、描述、金额、代码、索引)

日期 - 数据类型(bigint) - 长度(8) - 允许空值(是) - 唯一(否) - 主键(否)

描述 - 数据类型(ncarchar) - 长度(50) - 允许空值(Yes) - Unique(No) - Prim Key(No)

金额 - 数据类型(金钱) - 长度(19) - 允许空值(否) - 唯一(否) - 主键(否)

代码 - 数据类型(nvarchar) - 长度(4) - 允许 Nulls(No) - Unique(No) - Prim Key(No)

索引 - 数据类型(bigint) - 长度(8) - 允许空值(否) - 唯一(是) - 主键(否)

【问题讨论】:

    标签: sql parsing token offset sql-delete


    【解决方案1】:

    Indexreserved word in SQL CE,因此您需要将其放在方括号中,或者(最好)重命名该列以不使用保留字。

    此外,您应该参数化您的查询,而不是动态生成它,如下所示:

    SqlCeCommand deleteCmd = new SqlCeCommand("DELETE FROM Transactions WHERE [Index]=@Index", conn);
    var indParam = new SqlCeParameter("@Index", SqlDbType.BigInt, int.Parse(index));
    deleteCmd.Parameters.Add(indParam);
    try
    {
        deleteCmd.ExecuteNonQuery();
    }
    catch (SqlCeException ex)
    {
        Console.WriteLine("You failed!\n" + ex.Message);
    }
    

    【讨论】:

    • 是的,我设法让这个更新的查询工作。非常感谢你。我在表模式中将 Index 更改为 IndexVar,并且还参数化了我的查询。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多