none
Meu select no c# nao, esta funcionando RRS feed

  • Pergunta

  • Preciso selecionar os ids de 4 tabelas diferentes e estou fazendo assim:

    SELECT Id FROM [unitydb].[dbo].[AccessGroups];
    SELECT Id FROM [unitydb].[dbo].[AccessPoints]; 
    SELECT Id FROM [unitydb].[dbo].[TimeGroups]; 
    SELECT Id FROM [unitydb].[dbo].[Controllers]";

    using (SqlCommand command = new SqlCommand(sql_select, connection))
                            {
                                using (SqlDataReader reader = command.ExecuteReader())
                                {
                                    while (reader.Read())
                                    {
                                        tableAccessLevels.Rows.Add(reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2), reader.GetInt32(3));

                                    }
                                }

    estou utilizando uma dataRow para salvar os campos de cada busca e utilizando um foreach nesse dataRow para fazer a inserção em uma outra tabela:

                                           INSERT INTO [dbo].[AccessLevels] " +
                                            "([AccessGroupId] " +
                                            ",[EntityId] " +
                                            ",[EntityType] " +
                                            ",[TimeGroupId] " +
                                            ",[EndPointId]) " +
                                            "SELECT '" + dr["IdGroupAccess"] + "' , " +
                                            "'" + dr["IdAccessPoint"] + "' ," +
                                            "3 ," +
                                             "'" + dr["IdTimeGroups"] + "' " +
                                            "'" + dr["IdControllers"] + "'  " ;

    *os dr foi o nome que coloquei no foreach para armazenar os dados que vem do select.

    Tem algo errado no select? quando tento executar desse jeito aparece "Index was outside the bounds of the array".

    Alguem sabe o que pode ser?

    segunda-feira, 2 de maio de 2022 20:20

Todas as Respostas

  • Olá,

    Execute um select por vez. Como você precisa de todos os ids ao mesmo tempo, faça o join relacionando as tabelas e nomeie os ids para não gerar duplicidade no momento de ler. Ex.: SELECT Id as Id_AccessGroups FROM [unitydb].[dbo].[AccessGroups];

      
    --
    Espero que isso te ajude. Se te ajudou, marque como resposta para fechar a thread e ajudar outros usuários.

    Abrs,
    Reginaldo Villela.

    segunda-feira, 2 de maio de 2022 20:35
  • cara agora ta dando um erro no insert assim "The INSERT statement conflicted with the FOREIGN KEY constraint "FK_AccessLevels_TimeGroups". The conflict occurred in database "unitydb", table "dbo.TimeGroups", column 'Id'."

    e só esta pegando os dados da primeira colunas que busco que é 'AccessGroupId'...

    entao no accessgroupId aparece o valor, nos outros fica zerado e nessa AccessLevels da erro de foreign key.

    segunda-feira, 2 de maio de 2022 21:02
  • Olá,

    As tabelas abaixo, tem relacionamentos entre si?

    AccessGroups
    AccessPoints 
    TimeGroups
    Controllers

    segunda-feira, 2 de maio de 2022 21:58
  • Creio que nao diretamente

    terça-feira, 3 de maio de 2022 11:27
  • Olá, 

    Então é necessário vc fazer consulta por consulta e armazenando os valores em variáveis.

    Se as tabelas tivessem relacionamentos, você poderia fazer os joins e em apenas uma consulta, recuperaria os 4 valores necessários.

     

    --
    Espero que isso te ajude. Se te ajudou, marque como resposta para fechar a thread e ajudar outros usuários.

    Abrs,
    Reginaldo Villela.
    terça-feira, 3 de maio de 2022 13:02
  • brunights,

    Talvez o uso de CTEs ou até mesmo da cláusula output podem lhe ajudar, veja se os links abaixo podem trazer alguma tipo de solução:

    WITH common_table_expression (Transact-SQL) - SQL Server | Microsoft Docs

    OUTPUT Clause (Transact-SQL) - SQL Server | Microsoft Docs


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 5 de maio de 2022 11:13