Приложение Windows Mobile C # с базой данных - PullRequest
1 голос
/ 18 октября 2011

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

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

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

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

Спасибо, Ашиш

1 Ответ

0 голосов
/ 03 сентября 2013

Для использования базы данных на 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);

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

...