C#本地数据库更新错误

use*_*376 0 c# database runtime-error sql-server-ce

问题是我正在尝试写入一个名为的表Login.它有几列,有一个没有数据的列(null),我试图插入/更新列SuperSecretKey - nvarchar(100).

下面是代码:

public void InsertSecretKey(String SuperKey, int IDKey)
{
    conn = new SqlCeConnection(@"Data Source=|DataDirectory|\Database1.sdf");
    conn.Open();

    SqlCeCommand cmd = new SqlCeCommand();
    cmd.CommandText = "UPDATE Login SET SuperSecretKey = @SuperKey WHERE Key=@IDKEY;";
    cmd.Connection = conn;

    cmd.Parameters.AddWithValue("@SuperKey", SuperKey);
    cmd.Parameters.AddWithValue("@IDKey", IDKey);

    cmd.ExecuteNonQuery();
    conn.Close();
}
Run Code Online (Sandbox Code Playgroud)

这是错误:

解析查询时出错.
[令牌行号= 1,令牌行偏移= 51,令牌错误=密钥]

有帮助吗?谢谢!

Rob*_*III 5

键是保留字.错误是非常具体的:offset = 51=>在第51位有这个词key.它实际上告诉你:Token in error = Key.

你需要逃脱它,例如[key].逃避所有字段名称,表格等是一种很好的做法:

cmd.CommandText = "UPDATE [Login] SET [SuperSecretKey] = @SuperKey WHERE [Key]=@IDKEY;";
Run Code Online (Sandbox Code Playgroud)

当前版本的SQL Server中的保留关键字不在新的/未来的版本1中.生成("动态")查询的大多数ORM等默认情况下都会逃避这些值,只是为了"安全".

1即使关键字则不在此列目前,它可能在未来的未来版本中加入.你可能会和喜欢的名字安全CustomerIdMyVerySpecificName但像一般的话Key (你只是发现了),GUID,Version或者Descending,虽然目前还没有矜持,只是没有(面向未来)安全使用.