시스템에 인증 된 모든 사용자에 대해 생성 된 임시 정보를 저장하는 기능이 있습니다. 이 '세션 ID'는 인증 된 사용자의 원래 ID를 따라 세션 테이블에 저장된 문자열이며 세션 식별자를 부여 받았습니다.SQL Compact가 포함 된 적절한 SQL 쿼리 명령이 실패했습니다.
기능은 사용자로 구현하는 다른 방법을 통해 존재하는 경우 기존 세션 먼저 확인을 무효화// 비인증를 제거하면 다음과
는 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();
추가 중단 점 및 짜잔, 그것은 참으로 는을했다 : 그래서 비 매개 변수화 쿼리 문자열을 사용하여 동등한 불안을 추가했다. 그러나 계속하면 코드에서 쿼리도 실패합니다.. 예외가 발생하지 않았으므로이 성가신 문제의 주범을 찾을 수 없습니다. 및 모든 것이 올바른 것으로 보입니다. 데이터가 존재하고, 매개 변수가 적절한 유형 (문자열 및 int)으로 제공되며, 점검 할 항목이 없습니다. 연결이 열려있는 등.
주변 사람의 단서가 있습니까? 감사!
업데이트 : 내 잘못 culpa, 내가 테스트를 위해 그것을 수정 될 때까지 기능이 ExecuteScalar는 사용 사실을 놓쳤다. 은으로 ExecuteScalar를 사용하고 은 null의 경우을 반환합니다.
int foo = cmd.ExecuteNonQuery();
...하지만 당신은 명확 쿼리 (A SELECT)을 실행하려는 :
오랜 반응을 보내 주셔서 감사합니다. 어떻게 든 오류가 사라졌습니다. 나는 그것이 동시성과 관련이 있을지도 모른다고 생각하지만 그것은 지옥처럼 이상했다. – soze
@soze : 여전히 ExecuteNonQuery를 사용하는 경우 코드가 여전히 손상되어 여전히 수정해야합니다. –