2011-05-03 2 views
1

C# 프로젝트에서 SQL Server Compact를 사용하고 있습니다. 내 데이터베이스에는 ID 열 (PRIMARY KEY)과 사용자 이름 열의 두 열이있는 사용자 테이블이 있습니다. 사용자 테이블에 사용자 이름을 삽입하여 시스템과 인터페이스하는 다양한 사용자를 추적합니다.데이터베이스를 효율적으로 쿼리하고 필요한 경우 행을 추가하고 결과를 얻는 방법

사용자가 시스템에 접속하면 테이블에 이름이없는 경우 해당 이름을 기록하고 싶습니다. 분명히 UNIQUE 키워드를 Username 열에 추가 할 수는 있지만 중복 입력 시도에 대한 예외를 처리해야한다는 것을 의미합니다. 이름이 테이블에 있으면 (이미 존재했거나 추가해야했기 때문에) 해당 ID를 얻어야합니다.

다음은 촬영할 작업 코드입니다.

public void GetUserId(string username) 
{ 
    using (SqlCeCommand selcmd= new SqlCeCommand(
     "SELECT * FROM users WHERE username = @user", conn)) 
    { 
     selcmd.Parameters.AddWithValue("@user", username); 
     SqlCeResultSet rs = selcmd.ExecuteResultSet(ResultSetOptions.Scrollable); 
     if (!rs.HasRows) 
     { 
      using (SqlCeCommand inscmd= new SqlCeCommand(
       "INSERT INTO users (username) values (@user)", conn)) 
      { 
       inscmd.Parameters.AddWithValue("@user", username); 
       inscmd.ExecuteNonQuery(); 
      } 

      rs = selcmd.ExecuteResultSet(ResultSetOptions.Scrollable); 
     } 

     rs.ReadFirst(); 

     return (rs.GetInt32(rs.GetOrdinal("id"))); 
    } 
} 

더 효율적으로 수행 할 수있는 방법이 있습니까?

+0

음, 이것은 반드시 저장 프로 시저에 있어야합니다. 그런 다음, 당신이 무엇을 하든지, 그것은 데이터베이스로의 단 하나의 여행 일 것입니다. –

+0

동의 함. 유일한 문제는 SQL Server Compact가 저장 프로 시저를 지원하지 않는다는 것입니다. –

+0

업그레이드 시간. –

답변

1

귀하의 솔루션은 SQL 서버 컴팩트위한 최선의 방법입니다 - 다른 제안 된 솔루션은 SQL 서버에서 사용할 수없는 구문을 사용 컴팩트

+0

다시 도움을 주셔서 감사합니다. –

-1

당신이 할 수 있습니다 :

INSERT IF NOT EXISTS INTO `tablename` yadda yadda yadda 

예외를 발생하지 않을 것이다.

는 방법에 의해 SQL 질문하지 교류 # 또는 .net 하나입니다

+0

SQL Server Compact는 'INSERT IF NOT EXISTS ...'구문을 지원하지 않습니다. –

+0

귀하의 질문에 대한 의견을 참조하십시오 = P – Lacrymology

+0

하지만 당신이 할 수있는 또 다른 일은 이름을 찾는 선택이며, 아무런 행이 반환되지 않으면 INSERT – Lacrymology

관련 문제