Приложение Windows Mobile C # с базой данных

#database #windows-mobile-6.5

#База данных #windows-mobile-6.5

Вопрос:

Я пишу прототип приложения на устройстве Windows Mobile 6.5. Цель приложения — запрашивать у пользователя некоторые входные данные, собирать данные и сохранять их в локальной базе данных и на сервере.

Я закончил с созданием графического интерфейса (на C #) приложения, которое принимает все необходимые входные данные от пользователя.

Теперь мне нужно вставить эти данные в локальную базу данных и загрузить в серверную базу данных. обе базы данных должны будут синхронизироваться по HTTP, когда пользователь выберет это. Я мало работал с базами данных, за исключением написания некоторых запросов для извлечения данных из PostgreSQL в прошлом в среде Linux несколько лет назад.

Итак, мой вопрос в том, какой самый простой способ добиться того, что я пытаюсь? Мне не нужно много функций. Данные — это только строки и числа (без файлов, мультимедийных материалов и т. Д.) Какой сервер я должен установить и запустить? Какие компоненты я должен использовать на стороне клиента?

Спасибо Ashish

Ответ №1:

Для использования базы данных на Windows Mobile вам потребуется Microsoft SQL Server Compact 3.5 для Windows Mobile. http://www.microsoft.com/en-in/download/details.aspx?id=8831 . Вы можете загрузить и установить по указанной ссылке. После установки C:Program Files Microsoft SQL Server Compact Edition v3.5 Devices wce500 armv4i будет содержать все файлы CAB, которые необходимо установить на ваш мобильный телефон. Установить

  • sqlce.ppc.wce5.armv4i.CAB
  • sqlce.repl.ppc.wce5.armv4i.CAB

Для получения дополнительной информации о том, что нужно установить, см. http://msdn.microsoft.com/en-us/library/bb986876.aspx

Я написал небольшой вспомогательный класс для выполнения всех транзакций с базой данных.

      public class DataBaseHelper
{
    public enum typeOfQuery
    {
        insert,
        update,
        delete,
        getScalar,
        getDataSet,
        getDataTable
    };

    private string connectionString = Program.Connection;

    public object ExecuteDatabaseQuery(string query, Dictionary<string, object> dictionary, typeOfQuery typeOfQuery)
    {
        try
        {
            using (SqlCeConnection oCon = new SqlCeConnection(connectionString))
            {
                oCon.Open();
                string oSql = query;
                using (SqlCeCommand oCmd = new SqlCeCommand(oSql, oCon))
                {
                    oCmd.CommandType = CommandType.Text;
                    if (dictionary != null)
                    {
                        if (dictionary.Count != 0)
                        {
                            foreach (KeyValuePair<string, object> pair in dictionary)
                            {
                                if (pair.Value is DateTime)
                                    oCmd.Parameters.Add(pair.Key, SqlDbType.DateTime).Value = pair.Value ?? DBNull.Value;
                                else if (pair.Value is bool || pair.Value is Boolean)
                                    oCmd.Parameters.Add(pair.Key, SqlDbType.Bit).Value = pair.Value ?? DBNull.Value;
                                else
                                    oCmd.Parameters.Add(pair.Key, SqlDbType.NVarChar).Value = pair.Value ?? DBNull.Value;
                            }
                        }
                    }
                    // check what type of query using the enums in the constants.cs file
                    if ((typeOfQuery == (typeOfQuery.insert)) || (typeOfQuery == typeOfQuery.update) ||
                        (typeOfQuery == typeOfQuery.delete))
                    {
                        return oCmd.ExecuteNonQuery();
                    }
                    else if (typeOfQuery == typeOfQuery.getDataSet)
                    {
                        SqlCeDataAdapter adapter = new SqlCeDataAdapter(oCmd);
                        DataSet dataSet = new DataSet();
                        adapter.Fill(dataSet);
                        return dataSet;
                    }
                    else if (typeOfQuery == typeOfQuery.getDataTable)
                    {
                        SqlCeDataAdapter adapter = new SqlCeDataAdapter(oCmd);
                        DataSet dataSet = new DataSet();
                        adapter.Fill(dataSet);
                        return dataSet.Tables[0];
                    }
                    else if (typeOfQuery == typeOfQuery.getScalar)
                    {
                        object returnValue = oCmd.ExecuteScalar();
                        if (returnValue == null)
                        {
                            return string.Empty;
                        }
                        else
                            return returnValue;
                    }
                }
            }
        }
        catch (SqlCeException ex)
        {
            throw;
        }
        catch (Exception ex)
        {
            throw;
        }
        finally
        {
        }
        return false;
    }
}
  

Вы можете вызвать этот класс следующим образом

     string query = @"SELECT * FROM TABLE
                        WHERE COL1 = @COL1";

        Dictionary<string, object> dictionaryToInsert = new Dictionary<string, object>();
        dictionaryToInsert.Add("@COL1", Col1Value);

        return (DataTable)new DataBaseHelper().ExecuteDatabaseQuery(query,
            dictionaryToInsert, DataBaseHelper.typeOfQuery.getDataTable);
  

Аналогичным образом вы можете запрашивать базу данных и для других целей. используйте перечисление и измените запрос, и вы получите результат.