我有一个函数存储为系统中验证的每个用户生成的临时信息。这个“会话ID”是一个存储在会话表中的字符串,沿着被认证的用户的原始ID并被给予所述会话标识符。正确SQL查询命令与SQL Compact正在失败
该函数删除/ deauthenticate /该用户是否存在通过作为实施的另一方法无效的现有会话首先检查如下:
int userId = 0;
SqlCeCommand cmd = new SqlCeCommand();
SqlCeParameterCollection sqlParams = cmd.Parameters;
sqlParams.AddWithValue("@User", userName);
cmd.Connection = this.conn;
cmd.CommandText = "SELECT Id FROM Users WHERE (Username = @User)";
userId = (int) cmd.ExecuteScalar()
cmd.Dispose();
此后它试图找到该用户的现有会话,这是为了(通过不同的方法再次):
SqlCeCommand cmd = new SqlCeCommand();
SqlCeParameterCollection sqlParams = cmd.Parameters;
sqlParams.AddWithValue("@SID", mysession);
sqlParams.AddWithValue("@UID", myuserid);
cmd.Connection = this.Connection;
cmd.CommandText = "SELECT Id FROM UserSessions WHERE (SessionID = @SID) AND (User_Id = @UID)";
int foo = cmd.ExecuteNonQuery();
...失败。不幸的是,没有例外。所以我增加了一个不安全相当于使用非参数化查询字符串:
cmd.CommandText = String.Format("SELECT Id FROM UserSessions WHERE (SessionID = '{0}') AND (User_Id = {1})", mysession, myuserid);
cmd.Prepare();
int bar = cmd.ExecuteNonQuery();
新增断点,欲言又止,复制粘贴查询到Visual Studio查询工具,瞧,它确实工作。但在继续之后,代码中的查询失败以及。我无法找到这个烦人的问题的罪魁祸首,因为没有例外并且一切似乎都正确。数据存在,参数以适当的类型(字符串和整数)提供,我无法检查。连接打开等等。
周围任何人的任何线索?谢谢!
更新:过失,错过了函数中使用的ExecuteScalar直到我修改了它用于测试的事实。它确实使用ExecuteScalar和返回null,以防万一。
感谢您的漫长反应,我的坏。不知怎的,错误消失了。我认为它可能与同步性有关,但它很奇怪。 – soze
@soze:如果您仍在使用ExecuteNonQuery,那么代码仍然存在问题,您仍应该修复它。 –