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

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

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

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

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

Спасибо Ашиш


person Ashish Vyas    schedule 18.10.2011    source источник


Ответы (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);

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

person rakesh kashyap    schedule 03.09.2013