C # - ExecuteNonQuery () не работает с SQL Server CE - PullRequest
1 голос
/ 03 февраля 2010

Я получил некоторые данные, введенные пользователем, которые должны быть добавлены в файл базы данных (.sdf). Я выбрал Sql Server CE, потому что это приложение довольно маленькое, и я не видел необходимости работать с базой данных на основе служб.

Ну, в любом случае.

Вот код:

public class SqlActions
{
    string conStr = String.Format("Data Source = " + new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + "\\basedados.sdf");

    public SqlCeConnection SQLCEConnect()
    {
        SqlCeConnection Connection = new SqlCeConnection(conStr);
        Connection.Open();
        return Connection;
    }

    public Boolean AdicionarAuditorio(string Nome, int Capacidade)
    {
        string Query = "INSERT INTO auditorios (nome, capacidade) VALUES (@Nome, @Capacidade)";
        using (var SQLCmd = new SqlCeCommand(Query, SQLCEConnect()))
        {
            SQLCmd.Parameters.AddWithValue("@Nome", Nome);
            SQLCmd.Parameters.AddWithValue("@Capacidade", Capacidade);
            if (SQLCmd.ExecuteNonQuery() == 1)
            {
                return true;
            } else {
                return false;
            }

        }
    }
}

Я использую функцию AdicionarAuditorio(string Nome, int Capacidade) для вставки данных. выполнение ExecuteNonQuery(), которое должно возвращать количество затронутых строк после того, как он выполнил запрос. Так что он должен вернуть 1, если запрос выполнен успешно, верно?

В конце он возвращает 1, но если я просматриваю данные таблицы, данных, которые должен добавить запрос, там нет.

Так что здесь не так?

Примечание. Если вы думаете, что проблема в связи: я не вижу почему проблема, как только я получил немного Выберите заявления, которые используют это функция подключения SQLCEConnect() и все они работают довольно хорошо.

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

Ответы [ 2 ]

3 голосов
/ 03 февраля 2010

Вы уверены, что ищете правильный файл? Когда вы создаете свое приложение в VS, оно копирует SDF-файл как содержимое в целевую папку, поэтому база данных в вашем проекте не будет отражать какие-либо обновления. Ваш код выбирает местоположение файла там.

Между прочим, это не очень хорошая практика, поскольку после развертывания папки программы не могут быть записаны в ваше приложение (может ли это быть проблемой - вы уже развернули?). Вместо этого файл базы данных должен находиться в вашей папке appdata.

0 голосов
/ 03 февраля 2010

Возможно ли сделать звонок на AdicionarAuditorio в TransactionScope без звонка transactionScope.Complete()?

...