#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);
Аналогичным образом вы можете запрашивать базу данных и для других целей. используйте перечисление и измените запрос, и вы получите результат.