OLEDBConnection.Open () gera 'Erro não especificado'

Eu tenho um aplicativo que carrega um arquivo Excel .xls para o sistema de arquivos, abre o arquivo com um objeto oledbconnection usando o método .open() na instância do objeto e, em seguida, armazena os dados em um banco de dados. O upload e a gravação do arquivo no sistema de arquivos funciona bem, mas recebo um erro ao tentar abrir o arquivo em nosso servidor de produção somente . O aplicativo funciona bem em dois outros servidores (servidores de desenvolvimento e teste).

O código a seguir gera um 'Erro não especificado' no Exception.Message.

Citação:

        System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + location + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
        try
        {
            x.Open();
        }
        catch (Exception exp)
        {
            string errorEmailBody = " OpenExcelSpreadSheet() in Utilities.cs.  " + exp.Message;
            Utilities.SendErrorEmail(errorEmailBody);
        }

: cotação final

As pastas c: \\ temp e c: \ Documents and Settings \\ aspnet \ local \ temp do servidor fornecem o controle total do \ aspnet.

Acredito que exista algum tipo de problema de permissões, mas não consigo encontrar nenhuma diferença entre as permissões nas pastas anotadas e a pasta/diretório em que o arquivo do Excel é carregado. O mesmo local é usado para salvar o arquivo e abri-lo, e os métodos funcionam na minha estação de trabalho e em dois servidores da web. Servidores Windows 2000 SP4.

0
adicionado editado
Visualizações: 1

6 Respostas

Alguma coisa na exceção interna? Esta é uma aplicação de 64 bits? Os provedores OLEDB não funcionam em 64 bits. Você precisa ter seu alvo de aplicativo x86. Achei isso quando recebi um erro ao tentar abrir o acesso DB no meu computador de 64 bits.

0
adicionado

Sim. Eu também fiz isso. Peguei IMEX = 1, peguei Extended Properties, etc. Consegui dividi-lo nos servidores de teste e de desenvolvimento. :) Eu coloquei de volta em um de cada vez até que foi corrigido no dev e teste novamente, mas ainda não há workie em prod.

0
adicionado

Se você estiver usando a representação, precisará conceder permissão ao usuário da representação em vez de/além do usuário da aspnet.

0
adicionado

Eu recebi esse erro sobre as permissões, mas parece que você tem isso coberto. Eu também já vi isso com uma das bandeiras na seqüência de conexão - você pode brincar com isso um pouco.

0
adicionado
Mesmo? Esta resposta resolveu seu problema?
adicionado o autor juan, fonte

Tente envolver a localização entre aspas simples

System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + location + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
0
adicionado

Enquanto o problema de permissões pode ser mais comum, você também pode encontrar esse erro de limites de conexão do sistema de arquivos do Windows/Access Jet DB Engine, 64/255, eu acho. Se você violar as 255 conexões simultâneas de leitura/gravação do Access ou o limite de conexão de 64 (?) Por processo, você pode obter exatamente o mesmo erro. Pelo menos eu encontrei isso em um aplicativo onde conexões eram continuamente criadas e nunca fechadas corretamente. Um simples Conn.close (); caiu e a vida foi boa. Eu imagino que o Excel poderia ter problemas semelhantes.

0
adicionado
Como uma nota lateral: Conn.Dispose() aparentemente não fecha a conexão.
adicionado o autor Residuum, fonte