데이터베이스에서 INSERT 문을 실행하고 Auto_Increment 기본 키를 반환하는 함수가 필요합니다. 나는 다음과 같은 C# 코드를 가지고 있지만 INSERT 문은 잘 작동하지만 (데이터베이스의 레코드를 볼 수 있으며 PK는 올바르게 생성되고 행 == 1), id 값은 항상 0입니다. 잘못된? 답변에 대한 응답으로INSERT 문 다음에 오는 @@ IDENTITY는 항상 0을 반환합니다.
public int ExecuteInsertStatement(string statement)
{
InitializeAndOpenConnection();
int id = -1;
IDbCommand cmdInsert = connection.CreateCommand();
cmdInsert.CommandText = statement;
int rows = cmdInsert.ExecuteNonQuery();
if (rows == 1)
{
IDbCommand cmdId = connection.CreateCommand();
cmdId.CommandText = "SELECT @@Identity;";
id = (int)cmdId.ExecuteScalar();
}
return id;
}
private void InitializeAndOpenConnection()
{
if (connection == null)
connection = OleDbProviderFactory.Instance.CreateConnection(connectString);
if(connection.State != ConnectionState.Open)
connection.Open();
}
, 나는 시도 :
public int ExecuteInsertStatement(string statement, string tableName)
{
InitializeAndOpenConnection();
int id = -1;
IDbCommand cmdInsert = connection.CreateCommand();
cmdInsert.CommandText = statement + ";SELECT OID FROM " + tableName + " WHERE OID = SCOPE_IDENTITY();";
id = (int)cmdInsert.ExecuteScalar();
return id;
}
하지만 지금 내가 MS 액세스를 사용하고
"SQL 문 종료 후 발견 문자"오류를 받고 있어요 OleDb 연결을 사용하는 데이터베이스, Provider = Microsoft.Jet.OLEDB.4.0
당신이 사용중인 데이터베이스 서버 명확히 가능성이 InitializeAndOpenConnection/connection.CreateCommand에 대한 참조를 인라인 수를 당신? :) – Rob
또한 OID = SCOPE_IDENTITY() 인 "OID FROM x OID = SCOPE_IDENTITY()"의 전체 내용은 ID 값 3으로 삽입 된 레코드의 경우 다소 복잡합니다. "SELECT 3 FROM table_x WHERE 3 = 3 "- 다소 중복 됨 – Rob
@Rob : 중복 된 것처럼 보일 수 있지만 OID는 scope_identity()가 아닌 int 유형이므로 cmd.ExecuteScalar()를 직접 캐스팅 할 수 있습니다. – devio