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();
}这是错误:
解析查询时出错.
[令牌行号= 1,令牌行偏移= 51,令牌错误=密钥]
有帮助吗?谢谢!
键是保留字.错误是非常具体的:offset = 51=>在第51位有这个词key.它实际上告诉你:Token in error = Key.
你需要逃脱它,例如[key].逃避所有字段名称,表格等是一种很好的做法:
cmd.CommandText = "UPDATE [Login] SET [SuperSecretKey] = @SuperKey WHERE [Key]=@IDKEY;";
当前版本的SQL Server中的保留关键字不在新的/未来的版本1中.生成("动态")查询的大多数ORM等默认情况下都会逃避这些值,只是为了"安全".
1即使关键字则不在此列目前,它可能在未来的未来版本中加入.你可能会和喜欢的名字安全CustomerId和MyVerySpecificName但像一般的话Key (你只是发现了),GUID,Version或者Descending,虽然目前还没有矜持,只是没有(面向未来)安全使用.
| 归档时间: | 
 | 
| 查看次数: | 85 次 | 
| 最近记录: |