1

我正在开发一个与 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) - 允许空值(是) - 唯一(否) - 主键(否)

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

代码- 数据类型(nvarchar) - 长度(4) - 允许空值(否) - 唯一(否) - 主键(否)

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

4

1 回答 1

0

IndexSQL 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);
}
于 2013-11-12T15:36:00.627 回答