Как я могу переподключиться к SQLServer при отключении? - PullRequest
1 голос
/ 17 июня 2009

Я кодировал свой собственный крошечный статический класс DAL для .NET Compact Framework и локального SQL Server, который делает именно то, что мне нужно; GetTable (SQL, params), Exec (SQL, params), ExecScalar (SQL, Params) и т. Д. Я хотел сделать все с помощью SQL, поэтому я так и сделал, если есть лучшие способы обработки SQL-соединений в C #, кроме ORM- пожалуйста, дай мне знать. Вот как я предоставляю открытый доступ к объекту SQLConnection в моем классе DAL:

    public static SqlConnection Conn()
    {
        if (ConnStr == "")
            Defaults();
        try
        {

            if (conn == null)
                conn = new SqlConnection(ConnStr);
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
                Execute("SET DATEFORMAT DMY",null);
            }
            return conn;
        }
        catch
        {
            System.Windows.Forms.MessageBox.Show("Unable to connect to DB");
        }
        return null;
    }

Приложение, которое я кодирую, используется на мобильной Windows CE 5.0. Проблема в том, что когда пользователь отключается от беспроводной сети, а затем снова подключается, строка if (conn.State != ConnectionState.Open) не выполняется, и приложение выдает общее исключение базы данных, ничего больше. Как мне это исправить?

Редактировать: Оказывается, исключение вызывается такими функциями, как GetTable (). Я могу справиться с этим, используя try-catch в каждой функции, но, к сожалению, в Compact Framework каждая ошибка sql называется «SqlException». Как я могу различить проблемы с подключением и проблемы с запросами?

Ответы [ 4 ]

1 голос
/ 26 июня 2009

Я исправил это, используя новый SqlConnection для каждого запроса, вместо того, чтобы использовать один статический SqlConnection для всего.

1 голос
/ 18 июня 2009

Вы можете перехватить SqlException и проверить свойство ErrorCode , чтобы увидеть, не было ли это ошибкой, связанной с потерей соединения (т. Е. Сообщение об ошибке будет выглядеть как «не удается подключиться к серверу» и имеет конкретный код ошибки).

1 голос
/ 19 июня 2009

Если вы имеете дело с мобильными приложениями, вы никогда не сможете рассчитывать на доступ к сети.

Лучший подход - предоставить всем вам доступ к локальной базе данных (SQL CE, Sqlite), а затем синхронизировать изменения (в этом поможет .Net Synchronization Services) с основной базой данных.

Будет ли это работать с объемом данных для вашего приложения - другая история.

1 голос
/ 17 июня 2009

Можно ли использовать класс System.Net.NetworkInformation.NetworkInterface для проверки доступности сети?

Вы можете проверить сетевое соединение в .NET 2.0, используя GetIsNetworkAvailable ():

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()

Для отслеживания изменений в IP-адресе или доступности сети используйте события из класса NetworkChange:

System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged
System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged

Согласно предыдущему SO-ответу: C # - Как проверить сетевое соединение

...