Pergunta

Estou lendo o esquema de banco de dados para o banco de dados do VISTADB 4.0 usando a API padrão ADO.NET 'dbConnection.getschema'. Não encontrei uma maneira de obter a configuração de 'identidade' para uma coluna? A coleção de esquema 'Colunas' parece não ter uma coluna para isso e não estou ciente de nenhuma outra coleção que eu deveria examinar.

Se não for possível, consultando alguma das coleções disponíveis, preciso consultar alguma tabela ou visualização do sistema?

Qualquer ajuda seria apreciada.

Foi útil?

Solução

Não há tabelas "sistemas" no Vistadb. Há uma tabela [esquema de banco de dados] que contém a maior parte do que você precisa.

Esquema de banco de dados

Você pode obter as colunas de identidade para um banco de dados usando a tabela de esquema de banco de dados como esta:

select * from [database schema] where typeid = 6

Olhe no arquivo de ajuda para a lista TypeId e o que eles significam.

Depois de ter a lista, você pode combiná -la com o tipoID para tabelas para ver de que tabela a coluna de identidade veio.

A única captura com a tabela de esquema do banco de dados é que você não pode se auto -referenciar ou se unir a si (limitação de design). Portanto, se você precisar puxar e fazer referência por si só, precisará fazê -lo em dois comandos ou através de uma tabela temporária. O arquivo de ajuda tem um exemplo de como fazer isso também.

Maneira alternativa

Você também pode encontrar todas as colunas de identidade usando um Proc Stored VistAdb:

select * from VistaDBColumnSchema() where is_identity = true

DDA

Se você precisar encontrar o próximo valor, semente, etc, também poderá obtê -los através dos métodos DDA (acesso direto de dados).

A propriedade Identities em um objeto ivistadbableschema é uma coleção das identidades para essa tabela. Essa coleção pode ser levada para puxar os valores individuais.

As informações de identidade incluídas são o nome da semente, etapa, tablename e columnName.

ADO.NET STABEMATABLE

E sim, ainda há outra maneira. Você pode chamar o getsChematable para um leitor para obter mais informações sobre a estrutura subjacente.

using (VistaDBConnection cn = new VistaDBConnection("Data Source=" + dbName))
{
    cn.Open();

    using (VistaDBCommand cmd = new VistaDBCommand("Select * from simpletable", cn))
    {
        using (VistaDBDataReader myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo))
        {
            //Retrieve column schema into a DataTable.
            DataTable schemaTable = myReader.GetSchemaTable();

            foreach (DataRow myField in schemaTable.Rows)
            {
                foreach (DataColumn myProperty in schemaTable.Columns)
                {
                    System.Diagnostics.Debug.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString());
                }
            }
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top