Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
1

SQL Server Compact Framework. Как получить из базы данных последнюю добавленную запись в таблицу

10.03.2014, 18:56. Показов 2508. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Так не работает. Вообще исключение появляется, что не знает SQL такой функции
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        internal мщшв GetLastEventNumber()
        {
            SqlCeCommand command = new SqlCeCommand();
            command.CommandText = "SELECT LAST(Events.Id) FROM Events";
            var obj = GetObject(command);
        }
 
        private object GetObject(SqlCeCommand command)
        {
            try
            {
                command.Connection = _connection;
                return command.ExecuteScalar();
            }
            catch
            {
                Dispose();
            }
            finally
            {
                if (command != null)
                    command.Dispose();
            }
            return allData;
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2014, 18:56
Ответы с готовыми решениями:

Как вообще редактировать базы данных SQL Server Compact Framework 4.0
Стояла 2012 студия. Там я мог создать SQL Server Compact Framework 4.0 базу данных, подключиться к...

Добавить данные в таблицу базы данных Microsoft SQL Server Compact 3.5. Объясните пожалуйста, каким образом это делается =)
Здравствуйте. Решил научиться работать с базами данных. Cоздал проект, подключил базу данных...

Как подключить к проекту локальную базу данных SQL Server Compact 4.0
Добрый день всем Ребята подскажите как подключить к проэкту Локальную базу данных SQL Server...

Как в VS 2010 создать базу данных SQL Server Compact Edition 4.0
В списке есть только версия 3.5, но у меня установлен SQL Server Compact Edition 4-ой версии точно.

8
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
10.03.2014, 19:04 2
Может запрос изменить? Например так.
SQL
1
SELECT TOP 1 FROM <table> ORDER BY <key>
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.03.2014, 19:07 3
Casper-SC, потому что SQL не знает такой функци...
T-SQL
1
2
3
SELECT TOP 1 * 
FROM Events 
WHERE id = (SELECT MAX(id) FROM Events)
Добавлено через 23 секунды
xoraxax, сортировать всю таблицу ради 1 столбца не гуд.
2
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
10.03.2014, 19:09  [ТС] 4
Не работает. Я уже изменил даже класс, чтобы вообще хоть как-то получить, и тестировать легче запросы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        private object GetObject(SqlCeCommand command)
        {
            List<DbDataRecord> allData = new List<DbDataRecord>();
            SqlCeDataReader dataReader = null;
            try
            {
                command.Connection = _connection;
                dataReader = command.ExecuteReader();
                foreach (DbDataRecord rec in dataReader)
                    allData.Add(rec);
            }
            catch
            {
                Dispose();
            }
            finally
            {
                if (dataReader != null)
                    dataReader.Dispose();
                if (command != null)
                    command.Dispose();
            }
            return allData;
        }
Добавлено через 2 минуты
Psilon, не работает запрос этот. Я думаю, тут всё дело в том, что это SQL SERVER CE
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.03.2014, 19:13 5
Casper-SC, да не может такого быть. То есть я верю, но это основы SQL, их вырезать не могли...

Если есть желание, можно через тимвьювер посмотреть. Потому что у меня 2012 экспресс-таки..

Добавлено через 17 секунд
На нем все работает у меня

Добавлено через 1 минуту
Casper-SC, а если так?
T-SQL
1
SELECT * FROM Events WHERE id = @@IDENTITY;
0
3631 / 2549 / 712
Регистрация: 02.08.2011
Сообщений: 6,883
11.03.2014, 00:34 6
Casper-SC, предпоследний пост (запрос) Psilona просто обязан работать. ) Можно даже
SQL
1
TOP 1
убрать.

Добавлено через 2 минуты
But SQL Server Compact Edition doesn't support the TOP keyword
с SO.

Добавлено через 1 минуту

Не по теме:

И сам бы мог найти - много лишнего времени, смотрю )

0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
11.03.2014, 07:03  [ТС] 7
Цитата Сообщение от IamRain Посмотреть сообщение
Casper-SC, предпоследний пост (запрос) Psilona просто обязан работать. ) Можно даже
Я уже сделал. Не знаю нужна ли тут транзакция вообще, походу нет, потом буду вникать, главное заработало как надо:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
        internal FullEventInfo AddToLog(BaseEventInfo baseDescription)
        {
            SqlCeCommand command = new SqlCeCommand();
            command.Parameters.Add(new SqlCeParameter("@Date", SqlDbType.DateTime) { Value = baseDescription.Date });
            command.Parameters.Add(new SqlCeParameter("@DescriptionId", SqlDbType.Int) { Value = (int)baseDescription.Code });
            command.CommandText = "INSERT INTO Events (Events.Date, Events.DescriptionId) VALUES(@Date, @DescriptionId) ";
 
            SqlCeConnection connection = null;
            SqlCeTransaction transaction = null;
            bool success;
            try
            {
                connection = new SqlCeConnection(_connectionString);
                connection.Open();
                transaction = connection.BeginTransaction();
 
                command.Connection = connection;
                command.ExecuteScalar();
                command.Parameters.Clear();
 
                command.CommandText = "SELECT MAX(id) FROM Events";
                int id = (int)command.ExecuteScalar();
                transaction.Commit();
 
                command.Parameters.Add(new SqlCeParameter("@Id", SqlDbType.Int) { Value = id });
                command.CommandText =
    "SELECT Events.Id, Events.Date, Events.DescriptionId, EventDescriptions.Description, EventDescriptions.AdditionalDescription " +
    "FROM Events INNER JOIN EventDescriptions ON Events.DescriptionId = EventDescriptions.Id WHERE Events.Id = @Id";
 
                var dataReader = command.ExecuteReader();
                foreach (DbDataRecord rec in dataReader)
                    return ExtractEventInfo(rec);
            }
            catch
            {
                transaction.Rollback();
            }
            finally
            {
                if (connection.State == ConnectionState.Open)
                    connection.Close();
 
                connection.Dispose();
                command.Dispose();
            }
 
            return null;
        }
 
        private FullEventInfo ExtractEventInfo(DbDataRecord record)
        {
            int id = (int)record["Id"];
            DateTime date = (DateTime)record["Date"];
            EventCode code = (EventCode)record["DescriptionId"];
            string description = (string)record["Description"];
            string additionalDescription = (string)record["AdditionalDescription"];
            return new FullEventInfo(code, (uint)id, date, description, additionalDescription);
        }
Вызываю:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        private void AddToLog(BaseEventInfo baseEventInfo)
        {
            Task.Factory.StartNew(baseInfo =>
            {
                FullEventInfo fullEventInfo = _dataLayer.AddToLog((BaseEventInfo)baseInfo);
 
                Dispatcher.Invoke(new Action<FullEventInfo>(info =>
                {
                    _logList.Add(new EventInfoViewModel(fullEventInfo));
                    eventsListView.ScrollIntoView(_logList[_logList.Count - 1]);
                }), fullEventInfo);
 
            }, baseEventInfo);
        }
1
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.03.2014, 15:13 8
Casper-SC, кстати, а пробовал несколько запросов в один запихнуть? А-ля

C#
1
2
3
string commandText = @"insert into table1 values(1, 'hello')
                       GO
                       select * from table1"
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
11.03.2014, 19:37  [ТС] 9
Psilon, неа, не пробовал. Но нужно будет попробовать.
0
11.03.2014, 19:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2014, 19:37
Помогаю со студенческими работами здесь

Как средствами джавы реализовать просмотр базы данных Access, SQL Server, SQL Server Compact и запись в нее?
---

Нужно SQL-запросом вернуть самую последнюю добавленную запись
Нужно SQL-запросом вернуть самую последнюю добавленную запись. Такой вариант нормальный? SELECT...

При создании базы данных Microsoft SQL Server Compact 3.5 нажимаю кнопку создать и окно просто исчезает
При создании базы данных Microsoft SQL Server Compact 3.5 нажимаю кнопку создать и окно просто...

Как создать базу данных SQL Server Compact?
Установила SQL Server 2005.(((( Хотела в Management Studio создать базу данных SQL Server Compact....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru