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

Откуда:
Сообщений: 50
На Sql сервере необходимо получить данные их файла SQL CE 3.5. Запрос простенький:
select [Dtime], [Income]  from SensorData where ((Dtime > @ds) and (Dtime <= @de))

Фунция работает, если отсутствуют параметры, или присутствует один параметр. При добавлении второго параметра вываливается ошибка:

Произошла ошибка .NET Framework во время выполнения определяемой пользователем подпрограммы или агрегатной функции "GetDataFromSqlCe":
System.Runtime.InteropServices.SEHException: External component has thrown an exception.
System.Runtime.InteropServices.SEHException:
at System.Data.Common.UnsafeNativeMethods.ICommandWithParameters.SetParameterInfo(IntPtr cParams, IntPtr[] rgParamOrdinals, tagDBPARAMBINDINFO[] rgParamBindInfo)
at System.Data.OleDb.OleDbCommand.ApplyParameterBindings(ICommandWithParameters commandWithParameters, tagDBPARAMBINDINFO[] bindInfo)
at System.Data.OleDb.OleDbCommand.CreateAccessor()
at System.Data.OleDb.OleDbCommand.InitializeCommand(CommandBehavior behavior, Boolean throwifnotsupported)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.OleDb.OleDbCommand.ExecuteReader()
at UserFunctions.GetDataFromSqlCe(DateTime data_start, DateTime data_end, String db_name)

Начал тестировать на winforms. Отладка вылетает (прекращена работа программы...) на инструкции ExecuteReader(), так же при использовании параметров в количестве > 1.
При использовании провайдера sql server ce - все работает без проблем, но его нельзя использовать в проектах sql.

Собственно код:
            
            String db_name = @"E:\nc_slk.sdf";
            DateTime data_start = Convert.ToDateTime("01.10.2012");
            DateTime data_end = Convert.ToDateTime("02.10.2012");
            OleDbConnection connection = new OleDbConnection(
                String.Format("Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5; Data Source={0}; Persist Security Info=False;", db_name));
                    connection.Open();
                    OleDbCommand selectCounter = new OleDbCommand(
                        "select [Dtime], [Income]  from SensorData where ((Dtime > @ds) and (Dtime <= @de))", connection);
                        selectCounter.Parameters.AddWithValue("@ds", data_start);
                        selectCounter.Parameters.AddWithValue("@de", data_end);
                        int i;
                        OleDbDataReader DReader = selectCounter.ExecuteReader();
                        {
                            while (DReader.Read())
                                i = 1;
                                
                        }
26 окт 12, 13:43    [13380097]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с clr функцией  [new]
yooo
Member

Откуда:
Сообщений: 50
Базу другую подключал, по другим полям отбор то же пытался делать, то же самое
26 окт 12, 14:11    [13380341]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с clr функцией  [new]
FantomGood
Member

Откуда: Херсон
Сообщений: 335
не правильный SQL формат даты формируется в строке
                        selectCounter.Parameters.AddWithValue("@ds", data_start[b].Date[/b]);
                        selectCounter.Parameters.AddWithValue("@de", data_end[b].Date[/b]);

PS: можно и самому отформатировать
var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
26 окт 12, 18:41    [13382138]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с clr функцией  [new]
yooo
Member

Откуда:
Сообщений: 50
Не , про формат даты я в первую очередь думал, менял, то же самое.
29 окт 12, 08:33    [13388597]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с clr функцией  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
FantomGood
не правильный SQL формат даты формируется в строке
                        selectCounter.Parameters.AddWithValue("@ds", data_start[b].Date[/b]);
                        selectCounter.Parameters.AddWithValue("@de", data_end[b].Date[/b]);

PS: можно и самому отформатировать
var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
И чем же этот формат так хорош?
29 окт 12, 09:28    [13388742]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с clr функцией  [new]
yooo
Member

Откуда:
Сообщений: 50
если ставить условие выборки по столбцу int такая же ерунда.
Работает:
OleDbCommand selectCounter = new OleDbCommand(
                "select [Dtime], [Income]  from SensorData where ((Income > @ds))", connection);
            selectCounter.Parameters.AddWithValue("@ds", 0);

OleDbCommand selectCounter = new OleDbCommand(
                "select [Dtime], [Income]  from SensorData where ((Income > @ds) and (Income <= 1))", connection);
            selectCounter.Parameters.AddWithValue("@ds", 0);

OleDbCommand selectCounter = new OleDbCommand(
                "select [Dtime], [Income]  from SensorData where ((Income > 0) and (Income <= 1))", connection);

Не работает:
OleDbCommand selectCounter = new OleDbCommand(
                "select [Dtime], [Income]  from SensorData where ((Income > @ds) and (Income <= @de))", connection);
            selectCounter.Parameters.AddWithValue("@ds", 0);
            selectCounter.Parameters.AddWithValue("@de", 1);
29 окт 12, 10:19    [13388993]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с clr функцией  [new]
yooo
Member

Откуда:
Сообщений: 50
Если использовать конструкцию без параметров все работает:
 OleDbCommand selectCounter = new OleDbCommand(
                "select [Dtime], [Income]  from SensorData where ((Dtime > '" + data_start + "') and (Dtime <= '" + data_end + "'))", connection);

Странно как то.
29 окт 12, 10:36    [13389075]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить