Добавление и обновление записи программно с использованием .NETCF - PullRequest
0 голосов
/ 22 апреля 2009

ОК - я сформулировал этот поиск 40 разными способами, и, похоже, я здесь потерян.

Каждый пример, который я нахожу, кажется таким счастливым, что вы можете легко перетащить сетку данных и позволить пользователю заполнить ее - тогда они остановятся! Я знаю, как сделать все, что я прошу через LINQ. Это, очевидно, не будет переводить здесь. Я действительно должен был сначала выучить ADO.NET, , а затем LINQ, но НУООооо ...

Мне нужно знать, как сделать следующее в .NETCF (Windows Mobile 5), используя базу данных SQL CE на устройстве.

  1. Добавьте новую запись и заполните некоторые или все поля данными, которые я предоставляю. Мне не нужно добавлять запись в сетку данных - иногда пользователь даже не увидит эту запись. Как добавить новую запись - поместить в нее данные и сохранить их? Например: создайте новую запись доставки, скажем, и пусть программа сохранит дату в одном поле и число в другом поле.

  2. Поиск записи, затем обновление данных в ней. Опять же, используя LINQ, я могу сделать это легко - я не могу найти ни одного примера, как это сделать без него. Я могу найти множество примеров заполнения сетки полей, связанных с данными, позволяя пользователю вносить изменения и сохранять их. Мне не нужно это делать.

Скажем, мне нужно найти одну запись, которая соответствует критериям (customerID = 10 и orderID = 1234), а затем, когда (если) эта запись найдена, обновить в ней поле.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Я много читал и, похоже, что-то упустил!

Заранее спасибо ...

Ответы [ 3 ]

4 голосов
/ 22 апреля 2009

Для # 1 есть несколько способов. Два простых, распространенных способа:

Используйте SqlCeResultset, создайте с ним строку и вставьте.

using(SqlCeConnection connection = new SqlCeConnection(myConnString))
using (SqlCeCommand cmd = new SqlCeCommand())
{
    connection.Open();
    cmd.CommandText = "MyTable";
    cmd.CommandType = CommandType.TableDirect;
    cmd.Connection = Connection;
    SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Updatable);

    SqlCeUpdatableRecord record = rs.CreateRecord();

    // do something to set your values in the record

    rs.Insert(record);
}

Используйте SqlCeCommand, задайте команду SQL и вызовите ExecuteNonQuery.

using (SqlCeConnection connection = new SqlCeConnection(myConnString))
using (SqlCeCommand cmd = new SqlCeCommand())
{
    connection.Open();
    cmd.CommandText = "INSERT INTO MyTable(Foo) VALUES('bar')";
    cmd.CommandType = CommandType.Text;
    cmd.Connection = Connection;
    cmd.ExecuteNonQuery();
}

Для # 2 это не сильно отличается. Используйте обновляемый набор результатов, найдите запись, измените и вызовите Update или создайте свой SQL и отправьте его с помощью команды, используя ExecuteScalar или ExecutNonQuery. Код достаточно похож на приведенный выше, и я оставлю его на ваше усмотрение.

Быстрый поиск по "SqlCeResultSet" и "example" или "update example" дает множество релевантных результатов.

0 голосов
/ 29 апреля 2009

Кроме того, для всех, кто ищет эту книгу, есть хорошая глава по этому процессу: http://my.safaribooksonline.com/0321174046

Я все еще прорабатываю эту проблему, но добиваюсь хорошего прогресса,

Спасибо за помощь.

0 голосов
/ 22 апреля 2009

Спасибо,

Между этим и этим кодом, я думаю, я уже в пути.

Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click

    Dim con As SqlCeConnection

    con = New SqlCeConnection(("Data Source = " & Me.NorthwindDatabaseFullPath))
    con.Open()

    Dim sqlcdm As String = "INSERT INTO Orders VALUES(999, 'ALFKI', 1, 'RUDEDOG', '', '', '', '', '', 2, '11/15/1967', '11/16/1967', '11/17/1967', '23')"

    Dim SqlCeCommand As New SqlCeCommand(sqlcdm, con)

    SqlCeCommand.ExecuteNonQuery()

End Sub
...