コード例 #1
0
        //получение информации о внешних ключах
        public List <ForeignKeyDescription> GetForeingKeys(string pkCatalogName, string pkSchemaName, string pkTableName, string fkCatalogName, string fkSchemaName, string fkTableName)
        {
            var foreignKeyData = new List <ForeignKeyDescription>();

            if (_initialized)
            {
                using (ODBCHStatement statement = new ODBCHStatement(_connectionHandle))
                {
                    List <ODBCData> data = null;
                    ForeignKeysStatementDefinition foreignStatementDefinition = new ForeignKeysStatementDefinition();

                    try
                    {
                        data = BindBuffer(foreignStatementDefinition);
                        if (ODBCNative.ODBCMethods.GetForeignKeys(statement, pkCatalogName, pkSchemaName, pkTableName, fkCatalogName, fkSchemaName, fkTableName))
                        {
                            if (BindColumns(data, statement))
                            {
                                bool fetched = ODBCNative.ODBCMethods.Fetch(statement);

                                while (fetched)
                                {
                                    List <string> _fkColumns  = new List <string>();
                                    List <string> _pkColumns  = new List <string>();
                                    string        _fkName     = ODBCMethods.ReadString(data[11].ColumnData);
                                    string        _pkName     = ODBCMethods.ReadString(data[12].ColumnData);
                                    short         _updateRule = ODBCMethods.ReadShort(data[9].ColumnData);
                                    short         _deleteRule = ODBCMethods.ReadShort(data[10].ColumnData);

                                    while ((fetched) & (_fkName == ODBCMethods.ReadString(data[11].ColumnData)))
                                    {
                                        string _pkcolumnName = ODBCMethods.ReadString(data[3].ColumnData);
                                        string _fkcolumnName = ODBCMethods.ReadString(data[7].ColumnData);
                                        _fkColumns.Add(_fkcolumnName);
                                        _pkColumns.Add(_pkcolumnName);
                                        fetched = ODBCNative.ODBCMethods.Fetch(statement);
                                    }
                                    ForeignKeyDescription _fkd = new ForeignKeyDescription(_fkName, _pkName, _pkColumns, _fkColumns, _updateRule, _deleteRule);
                                    foreignKeyData.Add(_fkd);
                                }
                            }
                        }
                    }
                    finally
                    {
                        foreach (var record in data)
                        {
                            record.Dispose();
                        }
                    }
                }
            }
            return(foreignKeyData);
        }
コード例 #2
0
 private static void FillInternalData(ref List <ODBCData> data)// считываем данные из неуправляемой памяти в локальный буфер
 {
     foreach (var locData in data)
     {
         if (locData.ColumnType == ODBCDataType.Char)
         {
             locData.InternalData.strVal = ODBCMethods.ReadString(data[locData.ColumnIndex].ColumnData);
             locData.InternalData.intVal = -1;
         }
         if (locData.ColumnType == ODBCDataType.Integer)
         {
             locData.InternalData.intVal = ODBCMethods.ReadShort(data[locData.ColumnIndex].ColumnData);
         }
     }
 }