2011-06-27 104 views
9

Se me ha pedido que transfiera una aplicación WinForms que usa el patrón MVP a una página web. La aplicación, entre otras cosas, carga un archivo CSV a una DataTable y luego hace un poco de trabajo.Nombre de origen de datos no encontrado y no se especificó ningún controlador predeterminado

El archivo CSV se carga en el servidor de OK y luego leer el siguiente código

string connectionString = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Extensions=asc,csv,tab,txt;Persist Security Info=False;Dbq=C:\Temp\"; 

//check that file exists and in correct format 
if (File.Exists(this.WorkingFileName)) 
{      
    using (OdbcConnection connection = new OdbcConnection(connectionString)) 
    { 
     // Determine number of rows 
     string selectCount = "select count(*) from [MyFile.csv]"); 

     using (OdbcCommand command = new OdbcCommand(selectCount, connection)) 
     { 
      connection.Open(); 
     } 
    } 
} 

en este punto me sale el error:

ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

Ahora el código funciona bien en Windows Forms, pero falla en la web. ¿Hay algo que necesite cambiar en IIS, mi archivo de configuración u otra cosa para que este código funcione? ¿O hay algo más fundamental que debo hacer?

actualización

OK, así que todo salió lo que fue diferente entre mis dos versiones de código: La versión de Windows Forms se ejecuta como de 32 bits, lo más pronto que lo cambié a 64 bits que arrojó el mismo error . Ver: 32-bit Text drivers (Microsoft Access , Microsoft Excel and Text files) from a 64 bit application on windows 7

Para solucionar las cosas, instalé los controladores Access de 64 bits de http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=13255 pero sigo recibiendo el mismo error.

Si puedo comprobar el Administrador de orígenes de datos ODBC puedo ver "Microsoft Access Driver de texto (* .txt, * .csv) | 14.00.47600.1000 | Microsoft Corporation | ACEODBC.dll

por lo que parece que' re installed OK, entonces ¿por qué seguiría fallando?

Respuesta

13

OK, he encontrado el problema. Solo para resumir todas las partes de mi solución.

  1. desinstalar cualquier aplicación de Office de 32 bits (requeridas para el paso 2)
  2. Instalar el Access 64-bit drivers
  3. Vuelva a instalar cualquiera de las Oficinas de 32 bits aplicaciones
  4. Cambiar la cadena de conexión en DOS lugares como se puede ver here a:

    @ "Driver = {Microsoft Access Text Driver (* .txt, *.csv)}; Extensiones = asc, csv, tab, txt; Persiste la seguridad Info = False; Dbq = C: \ Temp \"

Tenga en cuenta que:

  1. El nombre del controlador se ha cambiado a Microsoft Access Driver texto
  2. El delimitador de las extensiones de archivo se ha cambiado de un punto y coma a un coma.

Yo no lugar el cambio de coma que me causó mucho dolor :-(

+1

No estoy diciendo que esta sea una opción para ti (no afirmaste ni negaste el requisito), pero ¿qué hay de retroceder a 32 bits? Suponiendo IIS 7+, ¿intentó ejecutar el grupo de aplicaciones en el modo Activar aplicaciones de 32 bits? Funciona en mi máquina! :) – mlhDev

+0

Sí, mi requisito era hacerlo funcionar en un servidor web de 64 bits – openshac

+0

¡Bravo! He estado luchando con este problema durante semanas hasta que encontré su solución. –

2

Esto probablemente se deba a que el servidor web no tiene la Jet Library instalada, que creo que proporciona el controlador de texto. Probablemente esté instalada localmente debido a que viene con MS Office (de nuevo, creo que este es el caso)

+0

estoy corriendo el código en mi propio PC en ambos casos, así que cualquier cosa que necesita ser instalado ya está instalado. – openshac

0

¿La cadena de conexión está bien formada? Parece que el parámetro dbq es incorrecto.

"Driver={Microsoft Text Driver (*.txt; *.csv)};Extensions=asc,csv,tab,txt;Persist Security Info=False;Dbq=**C:Temp\\**" 

también echar un vistazo a este link, proporciona muestras de cadena de conexión útil

+0

Gracias @Rodrigo, sí logré insertar un error tipográfico en mi cadena de conexión en mi publicación original. He corregido la pregunta original ahora. – openshac

Cuestiones relacionadas