none
Acessar dados de um banco não Sql Server RRS feed

  • Pergunta

  • Olá,

     

    Apesar de ser programador C# já algum tempo, estou iniciando no SharePoint agora.

    Preciso fazer uma aplicação no SP que acesse uma base de dados Firebird de outro sistema.

    Como eu faço para adicionar um Provider (no caso, do Firebird) ao Sharepoint? Tentei adicionar diretamente no Web.config, mas acho que ele nao reconheceu.

     

    Abraços

     

    Cássio

    quarta-feira, 11 de abril de 2007 02:11

Respostas

  • Voce está usando a versão 2007 e a webpart DataList do BDC?
    Se sim, essa webpart precisa que crie um provider BDC apontando para o FireBird.
    Não tenho certeza absoluta se é possível usar BDC com o FireBird. Acredito que sim.

    Nesse caso voce precisa montar um xml e importar para o Business Data Catalog. Entrando na administração do SharePoint, voce vai no SharedServices e no grupo Business Data Catalog voce clica em Import Application Definition para subir o xml.

    Esse xml não é muito simples de montar, pois tem que estar de acordo com o banco que voce está acessando e com as tabelas que vai acessar.
    Aqui vai um exemplo que fiz para o oracle.

    Da uma analisada e tenta adaptar para seu banco.

    Espero ter ajudado.

    <?xml version="1.0" standalone="yes"?>
    <LobSystem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsiTongue TiedchemaLocation="http://schemas.microsoft.com/office/2006/03/BusinessDataCatalog BDCMetadata.XSD" xmlns="http://schemas.microsoft.com/office/2006/03/BusinessDataCatalog" Type="Database" Version="1.0.0.0" Name="OracleLOBSystem">

      <Properties>
        <Property Name="WildcardCharacter" Type="System.String">%</Property>
      </Properties>

      <LobSystemInstances>
        <LobSystemInstance Name="OracleInstance">
          <Properties>
            <Property Name="DatabaseAccessProvider" Type="System.String">Oracle</Property>
            <Property Name="AuthenticationMode" Type="System.String">PassThrough</Property>
            <Property Name="RdbConnection Data Source" Type="System.String">oracle</Property>
            <Property Name="RdbConnection User ID" Type="System.String">sa</Property>
            <Property Name="RdbConnection Password" Type="System.String">sa</Property>
            <Property Name="RdbConnection Unicode" Type="System.String">True</Property>
            <Property Name="RdbConnection Integrated Security" Type="System.String"></Property>
          </Properties>
        </LobSystemInstance>
      </LobSystemInstances>

      <Entities>
        <Entity EstimatedInstanceCount="0" Name="Products">
          <Properties>
            <Property Name="DefaultAction" Type="System.String">View Profile</Property>
          </Properties>
          <Identifiers>
            <Identifier Name="ProductID" TypeName="System.Decimal" />
          </Identifiers>
          <Methods>
            <Method Name="Getdbo.Products">
              <Properties>
                <Property Name="RdbCommandText" Type="System.String">
                  SELECT PRODUCTID, PRODUCTNAME,
                  SUPPLIERID, CATEGORYID, QUANTITYPERUNIT,
                  UNITPRICE, UNITSINSTOCK, UNITSONORDER, REORDERLEVEL,
                  DISCONTINUED
                  FROM PRODUCTS
                  Where (ProductID &gt;= :GeneratedMinProductID) and (ProductID &lt;= :GeneratedMaxProductID)
                  </Property>
                <Property Name="RdbCommandType" Type="System.Data.CommandType">Text</Property>
              </Properties>
              <FilterDescriptors>
                <FilterDescriptor Type="Comparison" Name="ProductID" />
              </FilterDescriptors>
              <Parameters>
                <Parameter Direction="In" Name=":GeneratedMinProductID">
                  <TypeDescriptor TypeName="System.Decimal" IdentifierName="ProductID" AssociatedFilter="ProductID" Name="ProductID">
                    <DefaultValues>
                      <DefaultValue MethodInstanceName="Products.Finder" Type="System.Decimal">0</DefaultValue>
                      <DefaultValue MethodInstanceName="Products.SpecificFinder" Type="System.Decimal">0</DefaultValue>
                    </DefaultValues>
                  </TypeDescriptor>
                </Parameter>
                <Parameter Direction="In" Name=":GeneratedMaxProductID">
                  <TypeDescriptor TypeName="System.Decimal" IdentifierName="ProductID" AssociatedFilter="ProductID" Name="ProductID">
                    <DefaultValues>
                      <DefaultValue MethodInstanceName="Products.Finder" Type="System.Decimal">9999</DefaultValue>
                      <DefaultValue MethodInstanceName="Products.SpecificFinder" Type="System.Decimal">9999</DefaultValue>
                    </DefaultValues>
                  </TypeDescriptor>
                </Parameter>
                <Parameter Direction="Return" Name="Products">
                  <TypeDescriptor TypeName="System.Data.IDataReader, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="Products DataReader" IsCollection="true">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="System.Data.IDataRecord, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="Products DataRecord">
                        <TypeDescriptors>
                          <TypeDescriptor TypeName="System.Decimal" IdentifierName="ProductID" Name="ProductID" />
                          <TypeDescriptor TypeName="System.String" Name="ProductName" />
                          <TypeDescriptor TypeName="System.Decimal" Name="SupplierID" />
                          <TypeDescriptor TypeName="System.Decimal" Name="CategoryID" />
                          <TypeDescriptor TypeName="System.String" Name="QuantityPerUnit" />
                          <TypeDescriptor TypeName="System.Decimal" Name="UnitPrice" />
                          <TypeDescriptor TypeName="System.Decimal" Name="UnitsInStock" />
                          <TypeDescriptor TypeName="System.Decimal" Name="UnitsOnOrder" />
                          <TypeDescriptor TypeName="System.Decimal" Name="ReorderLevel" />
                          <TypeDescriptor TypeName="System.Decimal" Name="Discontinued" />
                        </TypeDescriptors>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
                </Parameter>
              </Parameters>
              <MethodInstances>
                <MethodInstance Name="Products.Finder" Type="Finder" ReturnParameterName="Products" ReturnTypeDescriptorName="Products DataReader" ReturnTypeDescriptorLevel="0" />
                <MethodInstance Name="Products.SpecificFinder" Type="SpecificFinder" ReturnParameterName="Products" ReturnTypeDescriptorName="Products DataReader" ReturnTypeDescriptorLevel="0" />
              </MethodInstances>
            </Method>
          </Methods>
        </Entity>
      </Entities>

    </LobSystem>

    quinta-feira, 12 de abril de 2007 15:30

Todas as Respostas

  • Cássio,

    Existe um provider "FirebirdNETProvider" para voce acessar o FireBird pelo .NET. Baixa e instala ele.
    Depois voce adiciona a referencia no seu projeto e inclui o namespace no código.

    using FirebirdSql.Data.Firebird;

    E usa os companente dele. Segue um exemplo simples.

    private static string stringConexao = System.Configuration.ConfigurationSettings.AppSettings["stringConexaoFB"];
            private static FbConnection conn;
            private static FbCommand cmd;
            private static FbDataReader dr;

            public ArrayList getFuncoes()
            {
                ArrayList funcoes = new ArrayList();
                try
                {
                    conn = new FbConnection( stringConexao );
                    cmd = new FbCommand( "SELECT NO_FUNCAO_SISTEMA FROM FUNCAO_SISTEMA", conn );
                    dr = cmd.ExecuteReader();

                    while( dr.Read() )
                    {
                        if( dr[""] != DBNull.Value )
                            funcoes.Add( dr["NO_FUNCAO_SISTEMA"].ToString() );
                    }
                    return funcoes;
                }
                catch(FbException ex)
                {                    
                    throw new Exception(ex.Message);
                }
                catch(Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }

    Voce está fazendo uma webpart?
    Se voce estiver usando o 2007, tem a opção do BDC.

    Espero ter ajudado.

    quinta-feira, 12 de abril de 2007 14:17
  • Olá Fred, obrigado pela atenção!

    Entao, o provider do Fb eu já conhecia, mas minha duvida era como utilizá-lo dentro do SP, por exemplo, fazer uma Datalist enxergá-lo. Tentei adicionar a referência a ele no web.config na mão, mas mesmo assim ele não é visto pelo SP.

    Ouvi falar desse BDC hoje, mas ainda nao vi nada a fundo. Vc acha que ele resolveria meu problema?

    Abraços!

    Cassio

    quinta-feira, 12 de abril de 2007 14:23
  • Voce está usando a versão 2007 e a webpart DataList do BDC?
    Se sim, essa webpart precisa que crie um provider BDC apontando para o FireBird.
    Não tenho certeza absoluta se é possível usar BDC com o FireBird. Acredito que sim.

    Nesse caso voce precisa montar um xml e importar para o Business Data Catalog. Entrando na administração do SharePoint, voce vai no SharedServices e no grupo Business Data Catalog voce clica em Import Application Definition para subir o xml.

    Esse xml não é muito simples de montar, pois tem que estar de acordo com o banco que voce está acessando e com as tabelas que vai acessar.
    Aqui vai um exemplo que fiz para o oracle.

    Da uma analisada e tenta adaptar para seu banco.

    Espero ter ajudado.

    <?xml version="1.0" standalone="yes"?>
    <LobSystem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsiTongue TiedchemaLocation="http://schemas.microsoft.com/office/2006/03/BusinessDataCatalog BDCMetadata.XSD" xmlns="http://schemas.microsoft.com/office/2006/03/BusinessDataCatalog" Type="Database" Version="1.0.0.0" Name="OracleLOBSystem">

      <Properties>
        <Property Name="WildcardCharacter" Type="System.String">%</Property>
      </Properties>

      <LobSystemInstances>
        <LobSystemInstance Name="OracleInstance">
          <Properties>
            <Property Name="DatabaseAccessProvider" Type="System.String">Oracle</Property>
            <Property Name="AuthenticationMode" Type="System.String">PassThrough</Property>
            <Property Name="RdbConnection Data Source" Type="System.String">oracle</Property>
            <Property Name="RdbConnection User ID" Type="System.String">sa</Property>
            <Property Name="RdbConnection Password" Type="System.String">sa</Property>
            <Property Name="RdbConnection Unicode" Type="System.String">True</Property>
            <Property Name="RdbConnection Integrated Security" Type="System.String"></Property>
          </Properties>
        </LobSystemInstance>
      </LobSystemInstances>

      <Entities>
        <Entity EstimatedInstanceCount="0" Name="Products">
          <Properties>
            <Property Name="DefaultAction" Type="System.String">View Profile</Property>
          </Properties>
          <Identifiers>
            <Identifier Name="ProductID" TypeName="System.Decimal" />
          </Identifiers>
          <Methods>
            <Method Name="Getdbo.Products">
              <Properties>
                <Property Name="RdbCommandText" Type="System.String">
                  SELECT PRODUCTID, PRODUCTNAME,
                  SUPPLIERID, CATEGORYID, QUANTITYPERUNIT,
                  UNITPRICE, UNITSINSTOCK, UNITSONORDER, REORDERLEVEL,
                  DISCONTINUED
                  FROM PRODUCTS
                  Where (ProductID &gt;= :GeneratedMinProductID) and (ProductID &lt;= :GeneratedMaxProductID)
                  </Property>
                <Property Name="RdbCommandType" Type="System.Data.CommandType">Text</Property>
              </Properties>
              <FilterDescriptors>
                <FilterDescriptor Type="Comparison" Name="ProductID" />
              </FilterDescriptors>
              <Parameters>
                <Parameter Direction="In" Name=":GeneratedMinProductID">
                  <TypeDescriptor TypeName="System.Decimal" IdentifierName="ProductID" AssociatedFilter="ProductID" Name="ProductID">
                    <DefaultValues>
                      <DefaultValue MethodInstanceName="Products.Finder" Type="System.Decimal">0</DefaultValue>
                      <DefaultValue MethodInstanceName="Products.SpecificFinder" Type="System.Decimal">0</DefaultValue>
                    </DefaultValues>
                  </TypeDescriptor>
                </Parameter>
                <Parameter Direction="In" Name=":GeneratedMaxProductID">
                  <TypeDescriptor TypeName="System.Decimal" IdentifierName="ProductID" AssociatedFilter="ProductID" Name="ProductID">
                    <DefaultValues>
                      <DefaultValue MethodInstanceName="Products.Finder" Type="System.Decimal">9999</DefaultValue>
                      <DefaultValue MethodInstanceName="Products.SpecificFinder" Type="System.Decimal">9999</DefaultValue>
                    </DefaultValues>
                  </TypeDescriptor>
                </Parameter>
                <Parameter Direction="Return" Name="Products">
                  <TypeDescriptor TypeName="System.Data.IDataReader, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="Products DataReader" IsCollection="true">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="System.Data.IDataRecord, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="Products DataRecord">
                        <TypeDescriptors>
                          <TypeDescriptor TypeName="System.Decimal" IdentifierName="ProductID" Name="ProductID" />
                          <TypeDescriptor TypeName="System.String" Name="ProductName" />
                          <TypeDescriptor TypeName="System.Decimal" Name="SupplierID" />
                          <TypeDescriptor TypeName="System.Decimal" Name="CategoryID" />
                          <TypeDescriptor TypeName="System.String" Name="QuantityPerUnit" />
                          <TypeDescriptor TypeName="System.Decimal" Name="UnitPrice" />
                          <TypeDescriptor TypeName="System.Decimal" Name="UnitsInStock" />
                          <TypeDescriptor TypeName="System.Decimal" Name="UnitsOnOrder" />
                          <TypeDescriptor TypeName="System.Decimal" Name="ReorderLevel" />
                          <TypeDescriptor TypeName="System.Decimal" Name="Discontinued" />
                        </TypeDescriptors>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
                </Parameter>
              </Parameters>
              <MethodInstances>
                <MethodInstance Name="Products.Finder" Type="Finder" ReturnParameterName="Products" ReturnTypeDescriptorName="Products DataReader" ReturnTypeDescriptorLevel="0" />
                <MethodInstance Name="Products.SpecificFinder" Type="SpecificFinder" ReturnParameterName="Products" ReturnTypeDescriptorName="Products DataReader" ReturnTypeDescriptorLevel="0" />
              </MethodInstances>
            </Method>
          </Methods>
        </Entity>
      </Entities>

    </LobSystem>

    quinta-feira, 12 de abril de 2007 15:30