2011-04-06 2 views
8

SQL 서버 CE에서 새 행의 ID를 검색 :행을 삽입 및 I 행을 삽입하고이 같은 뭔가 새로운 행의 ID를 다시 얻으려고

INSERT INTO blah....; 
SELECT @@IDENTITY as NewID; 

나는 모두를 실행하기 위해 노력하고있어 C#에서 DbCommand 개체를 한 번 호출하는 문 ... 작동하지 않거나 잘못되었습니다.

나는 컴팩트 에디션은 일괄 적으로 여러 문을 실행 지원하지 않습니다 읽었습니다 ...하지만 난이 발견 :

동시에 여러 쿼리를 실행하려는 경우, 새를 포함해야 각 문에 대한 줄 문자 및 각 문 끝의 세미콜론으로 구성됩니다.

출처 : http://technet.microsoft.com/en-us/library/bb896140(SQL.110).aspx

그래서 그것이 내가 무엇을 놓치고 작동 여부 ... 만일 그렇다면 무엇입니까?

(나는 두 명령을 실행할 수 있음을 알고 잘 작동하지만 뭔가 놓치고 있는지 궁금합니다.)

+1

"작동하지 않는 것 같습니다"[sic]는 무엇을 의미합니까? 무슨 일이야? 오류 메시지가 나타 납니까? – Guffa

답변

8

의사 오류 인 것처럼 보입니다. 그 반대의 경우입니다. ExecuteNonQuery 호출 당 하나의 명령문 만 실행할 수 있습니다.

+1

SQLCE [3.5 SP1] (http://technet.microsoft.com/en-us/library/bb896140(SQL.100).aspx), [3.5 SP2]에 대해 문서 오류를 3 회 이상 반복 할 수있는 경우에 놀랐습니다. (http://technet.microsoft.com/en-us/library/bb896140(SQL.105).aspx) 및 [4.0] (http://technet.microsoft.com/en-us/library/bb896140 SQL.110) .aspx)? 나는 정말로 혼란스러워. –

3

당신은 출력 할 수없는 방향으로 내가이 일을하는 데 sql-server-ce에 많은 오류 후 ID 값

sqlCommand Command = Conn.CreateCommand(); 
Command.CommandText = "insert into MyTable(Value1,Value2) values(MyValue,MyValue)" 
Command.ExecuteNonQuery(); 
Command.CommandText = "select @ID = @@IDENTITY" 
SqlParameter ID = new SqlParameter("@ID", SqlDbType.Int); 
ID.Direction = ParameterDirection.Output; 
Command.Parameters.Add(ID); 
Command.ExecuteNonQuery(); 
int NewID = (int)ID.Value; 
+0

정말이에요? 나는 DbCommand.ExecuteScalar()를 사용하고 있으며 새로운 레코드 식별 정보를 반환합니다. 일괄 처리가 아닌 별도의 명령 일뿐입니다. –

+2

SQL Server Compact Edition은 명령 당 하나의 명령문 만 지원합니다. [link] (http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/1d1d3267-dc29-470b-bb20-00487a39bc87/) – mariocase84

+1

또한 "반드시 @@ IDENTITY를 선택해야합니다. "당신이"INSERT "를 실행 한 동일한 연결에 대해. – Agent007

0

을 얻을 수있는 출력 매개 변수를 정의해야합니다.

public static long GetIdentity(this IDbConnection connection) 
{ 
    var cmd = connection.CreateCommand(); 
    cmd.CommandText = "SELECT @@IDENTITY"; 
    cmd.CommandType = CommandType.Text; 
    var id = cmd.ExecuteScalar(); 
    return (long)(decimal)id; 
} 
관련 문제