Кажется, мне повезло столкнуться с забавными проблемами при развертывании моего программного обеспечения .
Настройка:
- Windows 2000 Prof.
- .NET 2.0 Application
- Подключение к MySQL 5.0 через ODBCConnection с использованием MySQL ODBC-Connector 3.51.26
Я развертывал свое приложение, когда выполнял это исключение:
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcDataReader.GetData(Int32 i, SQL_C sqlctype, Int32 cb, Int32& cbActualOut)
at System.Data.Odbc.OdbcDataReader.internalGetString(Int32 i)
at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i, TypeMap typemap)
at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i)
at System.Data.Odbc.OdbcDataReader.GetValues(Object[] values)
at MyAppl.UninterestingStackTace.StartsHere()
Да, это только трассировка стека ... потому что нет сообщения об исключении, также нет и InnerException (я также регистрирую их с момента моего последнего обращения), это все, что я получил.
Код выглядит следующим образом:
// DtRdr is a passed in ODBCDataReader
if (DtRdr != null && !DtRdr.IsClosed)
{
Object[] buffer = new Object[DtRdr.FieldCount];
while (DtRdr.Read())
{
DtRdr.GetValues(buffer); // Here happens the exception
// Modify buffer and use it
}
}
Это происходит только на этом компьютере, извлеченные данные / база данных хороши (проверено на другом компьютере в той же сети, и я также проверил это локально на своем компьютере).dev-machine) и, конечно, он не воспроизводится ни на одной другой машине.
Глядя на это в Reflector, я понимаю, что, похоже, проблема с чтением данных из соединения.Все остальные операции работают нормально, я могу получить доступ к данным напрямую, только GetValues
не удается.
Я написал быстрое и простое тестовое приложение, которое выдает ту же ошибку, но также выводит следующий оператор после завершения:
Error in my_thread_global_end(): 1 threads didn't exit
Я не уверен, связано ли это или нет, извините за путаницу.
Я снова потерян ... Кто-нибудь видел что-то подобное раньше?
Редактировать: Вот мое тестовое приложение:
using System;
using System.Data;
using System.Data.Odbc;
namespace ODBCTest
{
class MainClass
{
public static void Main (string[] args)
{
try {
Console.WriteLine ("Creating connection...");
using (OdbcConnection conn = new OdbcConnection ("ConnStringHere")) {
conn.Open ();
Console.WriteLine ("Creating command...");
using (OdbcCommand cmd = conn.CreateCommand ()) {
cmd.CommandText = "SimpleSelectHere;";
Console.WriteLine ("Creating reader...");
using (OdbcDataReader rdr = cmd.ExecuteReader ()) {
if (rdr != null && !rdr.IsClosed) {
while (rdr.Read ()) {
object[] temp = new object[rdr.FieldCount];
rdr.GetValues (temp);
}
Console.WriteLine ("Seems to work fine.");
} else {
Console.WriteLine ("Could not create reader!");
}
}
}
}
} catch (Exception ex) {
Console.WriteLine (ex.Message);
Console.WriteLine (ex.StackTrace);
Console.WriteLine ();
if (ex.InnerException != null)
{
Console.WriteLine (ex.InnerException.Message);
Console.WriteLine (ex.InnerException.StackTrace);
} else {
Console.WriteLine("No InnerException.");
}
}
Console.ReadKey ();
}
}
}
И его вывод:
Creating connection...
Creating command...
Creating reader...
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcDataReader.GetData(Int32 i, SQL_C sqlctype, Int32 cb, Int32& cbActualOut)
at System.Data.Odbc.OdbcDataReader.internalGetString(Int32 i)
at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i, TypeMap typemap)
at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i)
at System.Data.Odbc.OdbcDataReader.GetValues(Object[] values)
at ODBCTest.MainClass.Main(String[] args)
No InnerException.
<At this point I hit a key>
Error in my_thread_global_end(): 1 threads didn't exit