2012-03-16 8 views

答えて

1

このコードは、私のO/Rマッパーの一部である

private string RetrieveAutoNumberColumn(OleDbConnection cnn, TableSchema tableSchema) 
{ 
    OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [" + tableSchema.TableName + "] WHERE False", cnn); 
    DataTable dtSchema = adapter.FillSchema(new DataTable(), SchemaType.Source); 
    if (dtSchema == null) { 
     throw new UnimatrixMappingException("Table \"" + tableSchema.TableName + "\" not found. Connection = " + this._connectString); 
    } 
    string columnName = null; 
    for (int i = 0; i < dtSchema.Columns.Count; i++) { 
     if (dtSchema.Columns[i].AutoIncrement) { 
      columnName = dtSchema.Columns[i].ColumnName; 
      break; 
     } 
    } 
    return columnName; 
} 

あなたは必ずしも同じではありません主キーを(取得することができ、この

var cnn = new OleDbConnection(
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\Data\MyDatabase.mdb\";OLE DB Services=-1"); 

のような接続を作成します。オートナンバー型列として)

private static void RetrievePrimaryKeyInfo(OleDbConnection cnn, TableSchema tableSchema, string[] restrictions) 
{ 
    using (DataTable dtPrimaryKeys = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, restrictions)) { 
     foreach (DataRow row in dtPrimaryKeys.Rows) { 
      string columnName = (string)row["COLUMN_NAME"]; 
      //TODO: Do something useful with columnName here 
     } 
    } 
} 

restrictionsは、

string[] restrictions = new string[] { null, null, tableName }; 
関連する問題