powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Dapper.net перестал работать в Sybase 12-16
4 сообщений из 4, страница 1 из 1
Dapper.net перестал работать в Sybase 12-16
    #38187441
Metra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Не знаю правильно ли в эту ветку пишу, ситуация такая: использую microOrm dapper .net для работы с sybase. До определённого обновления(12.0.3457) проблем при работе не было. После обновления возникла проблема - null pointer exception при выполнении любых действий с базой. Стал дебажить и обнаружил, что свойство ConnectionString в объекте connection уже с это ошибкой сразу появляется. В чём проблема? Через ado.net с sybase можно работать нормально, с другой стороны с mysql или sqlserver проблем никаких при работе не возникает. Предполагал, что какой-то временный глюк был. Но в последующих версиях, в том числе и 16 - та же ошибка:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
[NullReferenceException: Object reference not set to an instance of the object.]
   iAnywhere.Data.SQLAnywhere.SAConnection.CalledByEntityFramework() +263
   iAnywhere.Data.SQLAnywhere.SAConnection.get_ConnectionString() +538
   Dapper.Identity..ctor(String sql, Nullable`1 commandType, IDbConnection connection, Type type, Type parametersType, Type[] otherTypes) +73
   Dapper.<QueryInternal>d__13`1.MoveNext() +545
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +381
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
   Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) +218
   Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) +88

Everything works fine until sybase create fix v 12.3457 and in 16 version nothing chcanges - the same error! I look into connection object in debug.
In _connStr property cinnection string is right, but in +		ConnectionString I see exception message - 'cn.ConnectionString' threw an exception of type 'System.NullReferenceException'	string {System.NullReferenceException}
...
Рейтинг: 0 / 0
Dapper.net перестал работать в Sybase 12-16
    #38187481
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MetraВсем привет! Не знаю правильно ли в эту ветку пишу, ситуация такая: использую microOrm dapper .net для работы с sybase. До определённого обновления(12.0.3457) проблем при работе не было. После обновления возникла проблема - null pointer exception при выполнении любых действий с базой. Стал дебажить и обнаружил, что свойство ConnectionString в объекте connection уже с это ошибкой сразу появляется. В чём проблема?
Во первых, у тебя не какой-то никому неизвестный и не существующий "sybase" а (судя по используемым интерфейсным классам) одна из версий SQL Anywhere.
Во вторых, то как ты задаешь свой ConnectionString в объекте connection мы должны угадывать да?
В третьих, что ты обновлял и где? Сервер? Клиент? Программу на пользовательском компьютере? Интерфейсные библиотеки? . Net переставлял?

Metra Через ado.net с sybase можно работать нормально, с другой стороны с mysql или sqlserver проблем никаких при работе не возникает. Предполагал, что какой-то временный глюк был. Но в последующих версиях, в том числе и 16 - та же ошибка:Ну если ADO.Net работает, что тебе еще нужно? ADO - универсальный интерфейс, если он работает зачем возиться с уникальным? Тем более что тебе судя по всему надо еще и с другими СУБД работать.
...
Рейтинг: 0 / 0
Dapper.net перестал работать в Sybase 12-16
    #38187752
Metra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если был неточен в описании темы - извиняюсь. Злой какой-то ты (. Прошу писать по существу.
Уточняю: я использую iAnywhere.Data.SQLAnywhere.v4.0.dll, проект на asp.net mvc.

Вот код подключения
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
public class BaseDapperRepository : IDisposable
{
		protected DbConnection MDbConnection;

		private readonly ConnectionStringSettings _connectionSettings = ConfigurationManager.ConnectionStrings["ApplicationServices"];

	   public BaseDapperRepository()
		{
			var providerFactory = DbProviderFactories.GetFactory(_connectionSettings.ProviderName);
			
			MDbConnection = providerFactory.CreateConnection();
			if (MDbConnection == null)
				throw new Exception("Error while creating connetion to DB");

			MDbConnection.ConnectionString = _connectionSettings.ConnectionString;
			var res = GetIds();

		}

	   public dynamic GetIds()
	   {
		   dynamic result;
		   using (MDbConnection)
		   {
			   MDbConnection.Open();

			   const string sql = @"Vc_sp_language";

			   result = MDbConnection.Query(sql, commandType: CommandType.StoredProcedure);

			   MDbConnection.Close();
		   }

		   return result;
	   }
	   
	   public void Dispose()
	   {
			if(MDbConnection != null)
				MDbConnection.Dispose();
	    }
}


в контроллере соответственно вызов

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
public class HomeController : Controller
{
	private BaseDapperRepository _db;

	protected override void Initialize(RequestContext requestContext)
	{
		if (_db == null)
			_db = new BaseDapperRepository();

		base.Initialize(requestContext);
	}
	
	public ActionResult Index()
	{
		var rep1 = _db.GetIds();		

		return View();
	}
	
	protected override void Dispose(bool disposing)
	{
		if (disposing)
		{
			if (_db != null)
			{
				_db.Dispose();
				_db = null;
			}
		}
		base.Dispose(disposing);
	}
}


заметил, что свойство ConnectionString доступно только в конструкторе и здесь можно без проблем сделать запрос к базе:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public BaseDapperRepository()
{
	var providerFactory = DbProviderFactories.GetFactory(_connectionSettings.ProviderName);
	
	MDbConnection = providerFactory.CreateConnection();
	if (MDbConnection == null)
		throw new Exception("Error while creating connetion to DB");

	MDbConnection.ConnectionString = _connectionSettings.ConnectionString;
	var res = GetIds();
}


после отработки конструктора и вызове метода возникает такое исключение именно в этом свойстве - System.NullReferenceException

Модератор: пожалуйста, не забывай о кнопке SRC
...
Рейтинг: 0 / 0
Dapper.net перестал работать в Sybase 12-16
    #38188455
Metra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Совместно разобрались с проблемой. Это баг в самой dll.

"Да, действительно это баг в dll-ке - iAnywhere.Data.SQLAnywhere.
Этот метод CalledByEntityFramework - проверяет был ли вызов из EF.
В зависимости вызван ли из EF, или нет возвращаются разные ConnectionString.

В нем есть баг:
Он проверяет StackTrace - был ли вызов из System.Data.Entity:"

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
// iAnywhere.Data.SQLAnywhere.SAConnection
private bool CalledByEntityFramework()
{
    string[] array = new string[]
    {
        "System.Data.Entity"
    };
    StackTrace stackTrace = new StackTrace();
    for (int i = 0; i < stackTrace.FrameCount; i++)
    {
        Type declaringType = stackTrace.GetFrame(i).GetMethod().DeclaringType;
        string[] array2 = array;
        for (int j = 0; j < array2.Length; j++)
        {
            string value = array2[j];
            //здесь бросается Exception
            if (declaringType.FullName.StartsWith(value, StringComparison.InvariantCultureIgnoreCase)) 
            {
                return true;
            }
        }
    }
    return false;
}
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Dapper.net перестал работать в Sybase 12-16
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]