Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / sdf и Parameters / 11 сообщений из 11, страница 1 из 1
27.06.2012, 13:47
    #37856923
Dmitri4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sdf и Parameters
При использование параметризированных запросов, подключение через OleDbConnection не выдаёт ошибку, а просто завершает программу, через обычные(string) запросы всё хорошо работает. Вот код, в момент "com.ExecuteNonQuery()" программа завершается аварийно.


Код: 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.
        public string connectionString = @"Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5; Data Source=C:\Users\Администратор\Documents\Visual Studio 2010\Projects\Bank\Bank\bin\Bank.sdf;";

          string query;
          bool flag = false;
          using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                try
                {
                    query = string.Format("INSERT INTO Credits (ID, DebitorID, Amount, Balance, AddedDate) VALUES (@ID, @DebitorID, @Amount, @Balance, @AddedDate)");

                    OleDbCommand com = new OleDbCommand(query, connection);

                    com.Parameters.AddWithValue("@ID", ID);
                    com.Parameters.AddWithValue("@DebitorID", debitorID);
                    com.Parameters.AddWithValue("@Amount", amount);
                    com.Parameters.AddWithValue("@Balance", balance);
                    com.Parameters.AddWithValue("AddedDate", openDate);

                    connection.Open();
                    com.Connection = connection;
                    if (com.ExecuteNonQuery()== 1)
                        flag = true;
           
                       
                    }
                    catch(Exception)
                    {

                    }
                }



Подскажите пожалуйста.
...
Рейтинг: 0 / 0
27.06.2012, 13:50
    #37856929
Deza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sdf и Parameters
...
Рейтинг: 0 / 0
27.06.2012, 13:50
    #37856934
Dmitri4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sdf и Parameters
Лишняя строчка, забыл убрать. Но она ничего не меняет.

Код: c#
1.
                    com.Connection = connection;
...
Рейтинг: 0 / 0
27.06.2012, 13:57
    #37856951
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sdf и Parameters
Dmitri4,

Вы правда прочитали то, на что вам ссылку дали? Не похоже.
...
Рейтинг: 0 / 0
27.06.2012, 14:02
    #37856963
Dmitri4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sdf и Parameters
Как я её мог прочитать, если мой второй ответ был дан в ту же секунду, что и ответ Deza.
К тому же я надеялся на более конструктивную помощь, MSDN я умею пользоваться и без помощи форума. Я думал форум создан именно для того, чтобы давать конкретные советы, а не кидать ссылки на MSDN, в котором не всегда просто и понятно описано. Жаль что 99% считаю себя слишком "умными", чтобы просто нормально объяснить. Надеюсь на оставшийся 1%.
...
Рейтинг: 0 / 0
27.06.2012, 14:42
    #37857059
n3wb13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sdf и Parameters
Поставщик данных OLE DB .NET Framework использует позиционные параметры, помеченные знаком вопроса (?), вместо именованных параметров.

Я хз как это можно не увидеть или не понять, прочитав по ссылке выше
...
Рейтинг: 0 / 0
27.06.2012, 14:44
    #37857063
Deza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sdf и Parameters
Dmitri4,

простыми словами, ты хотел, что б сделали все за тебя, в таком случае будь готов оплатить, работу!
а по факту, я тебе подсказал, используй OleDbParameter, если не понятно на MSDN, то гугл в помощь

вообще где сложность, все просто!

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
OleDbParameter parameter;

            parameter = new OleDbParameter
                            {
                                ParameterName = "@Date",
                                OleDbType = OleDbType.DBDate,
                                Value = DateTime.Now,
                                Direction = ParameterDirection.Input
                            };
            com.Parameters.Add(parameter);

            parameter = new OleDbParameter
                            {
                                ParameterName = "@Name",
                                OleDbType = OleDbType.VarChar,
                                Value = "user",
                                Direction = ParameterDirection.Input,
                                Size = 128
                            };
...
Рейтинг: 0 / 0
27.06.2012, 15:18
    #37857142
Dmitri4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sdf и Parameters
n3wb13,

Как я уже описал выше, пользоваться MSDN я умею и вариант с (?) я пробовал, но это не помогло. Написал первый свой пример без этого, так как это самая короткая запись из всего, что я смог вычитать.

Deza,

Данный код я использовал и до этого, но так же ничего не помогло. Вообще на форуме я читал что может быть какая-то проблема с тем, что sdf при таком подключении куда-то копируется при вставке и данные вставляются в эту копию (именно поэтому com.ExecuteNonQuery() ничего не возвращает и программа завершается аварийно). Но, к сожалению, на MSDN я не нашёл ничего подобного.

P.S. Откуда столько агрессии-то? Давайте жить дружно ;)

Чтобы у вас не было сомнений в моих словах, предоставляю код, который я только что ещё раз опробовал со всеми вашими замечаниями (данные в openDate оптимизированы для datetime SQL compact и вставляются при ручной работе с базой):
Код: 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.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
        public bool TestMethod (Guid ID, Guid debitorID, int amount, int balance, String openDate)
        {
            string query;
            bool flag = false;
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                try
                {
                    query = string.Format("INSERT INTO Credits (ID, DebitorID, Amount, Balance, AddedDate) VALUES (?,?,?,?,?)");

                    OleDbCommand com = new OleDbCommand(query, connection);

                    OleDbParameter parameter;

                    parameter = new OleDbParameter
                    {
                        ParameterName = "@ID",
                        OleDbType = OleDbType.Guid,
                        Value = ID,
                        Direction = ParameterDirection.Input
                    };
                    com.Parameters.Add(parameter);

                    parameter = new OleDbParameter
                    {
                        ParameterName = "@DebitorID",
                        OleDbType = OleDbType.Guid,
                        Value = debitorID,
                        Direction = ParameterDirection.Input
                    };
                    com.Parameters.Add(parameter);

                    parameter = new OleDbParameter
                    {
                        ParameterName = "@Amount",
                        OleDbType = OleDbType.Integer,
                        Value = amount,
                        Direction = ParameterDirection.Input
                    };
                    com.Parameters.Add(parameter);

                    parameter = new OleDbParameter
                    {
                        ParameterName = "@Balance",
                        OleDbType = OleDbType.Integer,
                        Value = balance,
                        Direction = ParameterDirection.Input
                    };
                    com.Parameters.Add(parameter);

                    parameter = new OleDbParameter
                    {
                        ParameterName = "@AddedDate",
                        OleDbType = OleDbType.VarChar,
                        Value = openDate,
                        Direction = ParameterDirection.Input
                    };
                    com.Parameters.Add(parameter);

                    connection.Open();
                    if (com.ExecuteNonQuery() == 1)
                        flag = true;
                    }
                    catch(Exception)
                    {

                    }
                }
            return flag;
        }
...
Рейтинг: 0 / 0
27.06.2012, 15:24
    #37857153
Deza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sdf и Parameters
Dmitri4,

заставь дурака богу молиться...

я не знаю с какой бд вы соединяетесь

попробуйте так
query = string.Format("INSERT INTO Credits (ID, DebitorID, Amount, Balance, AddedDate) VALUES (@Id,@DebitorID,@Amount,@Balance,@AddedDate)");

parameter = new OleDbParameter
{
ParameterName = "@Amount",
OleDbType = OleDbType.Integer,
Value = amount,
Direction = ParameterDirection.Input
};


или

query = string.Format("INSERT INTO Credits (ID, DebitorID, Amount, Balance, AddedDate) VALUES (?Id,?DebitorID,?Amount,?Balance,?AddedDate)");

parameter = new OleDbParameter
{
ParameterName = "?Amount",
OleDbType = OleDbType.Integer,
Value = amount,
Direction = ParameterDirection.Input
};

точно не помню, с ADO.NET больше года уже не работаю
...
Рейтинг: 0 / 0
27.06.2012, 15:31
    #37857171
Deza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sdf и Parameters
Deza,
если это SQL Server Compact
и зачем использовать для него юзать Oledb

когда есть
Пространство имен System.Data.SqlServerCe
...
Рейтинг: 0 / 0
28.06.2012, 14:30
    #37858851
Dmitri4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sdf и Parameters
Переписал приложение на System.Data.SqlServerCe, даже с тамошними параметризированными запросами разобрался. Всем спасибо. Если кому-то ещё нужна будет помощь в этом вопросе - пишите мне в личку тогда.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / sdf и Parameters / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]