Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не записывает в БД  [new]
hrm57
Member

Откуда:
Сообщений: 9
У меня есть следующий простой код, в котором проверяется была ли сделана запись в БД. При выполнении отображается форма "Запись добавлена". Но в реальности новой строки в базе данных нет.
Подскажите плз, в чем причина.

            try
            {
                string ConnectionString = "Data Source=BirthDay.sdf";
                using (conn = new SqlCeConnection(ConnectionString))
                {
                    conn.Open();

                    string quary = "INSERT INTO DataBirthDay(lastName) VALUES ('" + lastName + "')";
                    SqlCeCommand myCommand = new SqlCeCommand(quary, conn);

                    int col = myCommand.ExecuteNonQuery();
                    if (col != 0)
                    {
                        MessageBox.Show("Запись добавлена");
                    }
                    else
                    {
                        MessageBox.Show("Пролет");
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.ToString());
            }
            finally
            {

                conn.Close();
            }


Спасибо за помощь.
1 апр 14, 21:22    [15818544]     Ответить | Цитировать Сообщить модератору
 Re: Не записывает в БД  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
читаем матчасть
Операторы UPDATE, INSERT и DELETE возвращают количество строк, которые были обработаны с их помощью. Когда у таблицы, для которой выполняется вставка или обновление строк, имеются триггеры, возвращаемое значение содержит количество задействованных в операции строк, а также количество строк, обработанных триггерами. Для всех прочих типов операторов возвращаемым значением является -1. В случае отката также возвращается значение -1.


условие
if (col != 0)
при col = -1 является истинным.
Отсюда и чудеса.
1 апр 14, 21:51    [15818660]     Ответить | Цитировать Сообщить модератору
 Re: Не записывает в БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31969
SQL2008
условие
if (col != 0)

при col = -1 является истинным.
Отсюда и чудеса.
Наверное, при ошибке был бы эксепшен.

Триггеров в СЕ вроде нету.

Остаётчся подключание к другой базе...
1 апр 14, 22:42    [15818827]     Ответить | Цитировать Сообщить модератору
 Re: Не записывает в БД  [new]
hrm57
Member

Откуда:
Сообщений: 9
Я посмотрел, что возвращается 1. И это правильно, так как вставляется одна запись. Так что тут дело в другом.
1 апр 14, 22:47    [15818835]     Ответить | Цитировать Сообщить модератору
 Re: Не записывает в БД  [new]
hrm57
Member

Откуда:
Сообщений: 9
alexeyvg,

Как может быть подключение к другой базе, если она у меня единственная.
В свойстве БД указано, что копировать, если новее.
При значении этого свойства "Не копировать", приложение вообще не находит базу данных.
1 апр 14, 22:52    [15818850]     Ответить | Цитировать Сообщить модератору
 Re: Не записывает в БД  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Попробуйте указать полный путь к базе, чтобы исключить ошибку
Например

string ConnectionString = "Data Source=c://temp/BirthDay.sdf";
1 апр 14, 23:06    [15818882]     Ответить | Цитировать Сообщить модератору
 Re: Не записывает в БД  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Еще одно предположение, что при выполнении запроса неявно вызывается транзакция, и при выходе из using( ... ) { }
она откатывается
1 апр 14, 23:13    [15818904]     Ответить | Цитировать Сообщить модератору
 Re: Не записывает в БД  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Поставьте точку прерывания на

MessageBox.Show("Запись добавлена");


и когда выполнение остановится на этой точке
выполните запрос к базе


SELECT * FROM DataBirthDay (NOLOCK)
1 апр 14, 23:18    [15818921]     Ответить | Цитировать Сообщить модератору
 Re: Не записывает в БД  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
hrm57
У меня есть следующий простой код, в котором проверяется была ли сделана запись в БД. При выполнении отображается форма "Запись добавлена". Но в реальности новой строки в базе данных нет.
Подскажите плз, в чем причина.
+ код тут

            try
            {
                string ConnectionString = "Data Source=BirthDay.sdf";
                using (conn = new SqlCeConnection(ConnectionString))
                {
                    conn.Open();

                    string quary = "INSERT INTO DataBirthDay(lastName) VALUES ('" + lastName + "')";
                    SqlCeCommand myCommand = new SqlCeCommand(quary, conn);

                    int col = myCommand.ExecuteNonQuery();
                    if (col != 0)
                    {
                        MessageBox.Show("Запись добавлена");
                    }
                    else
                    {
                        MessageBox.Show("Пролет");
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.ToString());
            }
            finally
            {

                conn.Close();
            }


Спасибо за помощь.
Файл BirthDay.sdf самым тупым образом перезаписывается при перекомпиляции и запуcке приложения из среды VS, если это файл включен в состав проекта - т.е. он может быть "каждый раз новый"...
Как уже было предложено, перенесите файл в конкретное место и укажите полный путь к нему.
Или запускайте приложение не из VS. Или поменяйте опции копирования для этого файла при компиляции.
2 апр 14, 00:38    [15819118]     Ответить | Цитировать Сообщить модератору
 Re: Не записывает в БД  [new]
hrm57
Member

Откуда:
Сообщений: 9
sphinx_mv
hrm57
У меня есть следующий простой код, в котором проверяется была ли сделана запись в БД. При выполнении отображается форма "Запись добавлена". Но в реальности новой строки в базе данных нет.
Подскажите плз, в чем причина.

Спасибо за помощь.
Файл BirthDay.sdf самым тупым образом перезаписывается при перекомпиляции и запуcке приложения из среды VS, если это файл включен в состав проекта - т.е. он может быть "каждый раз новый"...
Как уже было предложено, перенесите файл в конкретное место и укажите полный путь к нему.
Или запускайте приложение не из VS. Или поменяйте опции копирования для этого файла при компиляции.


Изменять опции копирования не получается. Файл БД в проекте оказывается всегда новее, чем в директории Debug. К тому же не нашел никакой простенькой программы, чтобы можно было просматривать этот файл БД с расширением .pdb
В общем решил я работать не с compakt, а с нормальной SQL базой, чтобы можно было работать с ней через менеджер.
Спасибо всем за помощь.
10 апр 14, 22:58    [15865286]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить