когда я пытаюсь выполнить следующий код, в ExecuteReader возникает исключение NullReferenceException:
static public IDataReader executeReader(string query, string connectionString, string databaseType)
{
switch(databaseType)
{
case "SqlServer":
//stuff for Sql Server
case "DB2":
iDB2Connection myConnectionDB2 = new iDB2Connection(connectionString);
iDB2Command sqlCommandDB2 = new iDB2Command(query, myConnectionDB2);
sqlCommandDB2.CommandTimeout=0;
try
{
sqlCommandDB2.Connection.Open();
***The exception is raised here...***
return sqlCommandDB2.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception e)
{
sqlCommandDB2.Dispose();
myConnectionDB2.Close();
throw new Exception("Error in DBHelper:ExeSQL()-> " + e.ToString());
}
default:
//stuff for Oracle
}
}
Вот исключение сообщения:
System.NullReferenceException: ссылка на объект не относится к определенному экземпляру объекта. в Microsoft.Win32.Win32Native.CopyMemoryUni (StringBuilder pdst, IntPtr psrc, IntPtr sizetcb) в System.Runtime.InteropServices.Marshal.PtrToStringUni (IntPtr ptr) в IBM.Data.DBHoldecol.by строка выше.
Каждый параметр заполнен, запрос выполняется правильно с SQL-представлением, строка подключения правильная и тип базы данных в порядке ... Как и любой статический метод, ничего больше не нужно устанавливать ... я уверен, что это что-то глупое , но не могу понять что.
sql
? Вы хотели использовать переменнуюquery
, переданную в функцию? - person George Johnston   schedule 08.08.2011IBM.Data.DB2.iSeries
), если вашsql
установлен и действителен, как отмечает Питер выше. - person Dan Abramov   schedule 08.08.2011IBM.Data.DB2.iSeries
падает очень некрасиво при копировании строки Unicode из некоторой памяти вIntPtr psrc
вStringBuilder pdst
. Эта строка будет содержать столько байтов, сколько число, на которое указываетIntPtr sizetcb
. Я предполагаю, что построитель строк не был создан. Либо вам нужно вызвать поставщика данных DB2 по-другому, либо получить другую версию, которая работает более элегантно. - person Jodrell   schedule 08.08.2011