Oracle и db.CreateParameters
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 29.04.08 11:53
Оценка:
Непойму чего не так с CreateParameters:

public class MessageData
{
 [MapField("CALL_ID")]
 public string CallID;

 [MapField("FROM_IP")]
 public string FromIP;
 
 [MapField("CALL_DATE")]
 public DateTime CallDate;
}

DbManager.AddDataProvider(new OracleDataProvider());
DbManager.AddConnectionString("Oracle", "Data Source=new;User ID=user;Password=password;");

MessageData msg = new MessageData();
msg.CallID = "lsakxnsaljknsalk";
msg.FromIP = "192.168.1.78";
msg.CallDate = DateTime.Now;

using(DbManager db = new DbManager())
{
  db
     .SetCommand(@"
      INSERT INTO SUP_AUDIO_MESSAGE
        ( ID, CALL_ID, FROM_IP, CALL_DATE ) 
      VALUES 
            ( SUP_AUDIO_SEQ.NEXTVAL, @CALL_ID, @FROM_IP, @CALL_DATE )",
      db.CreateParameters(msg))
     .ExecuteNonQuery();
}

выдает:

BLToolkit.Data.DataException was unhandled
Message="ORA-01036: illegal variable name/number\n"
Source="testBLTookit"
StackTrace:
в testBLTookit.Program.Main(String[] args) в C:\PROJECTS\CS\tests\testBLTookit\Program.cs:строка 60
в System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()


Если заменить @CALL_ID, @FROM_IP, @CALL_DATE на строки с параметрами, а db.CreateParameters(msg) выбросить, то все вставляется без ошибок. Таже самая db.CreateParameters(msg) для того же класса с MSSQL проходит без ошибок. Как полечить и в чем тут дело?
Re: Oracle и db.CreateParameters
От: der Igel Россия  
Дата: 29.04.08 12:26
Оценка:
Odi$$ey wrote:

> Если заменить @CALL_ID, @FROM_IP, @CALL_DATE на строки с параметрами, а

> db.CreateParameters(msg) выбросить, то все вставляется без ошибок. Таже
> самая db.CreateParameters(msg) для того же класса с MSSQL проходит без
> ошибок. Как полечить и в чем тут дело?


Использовать двоеточие вместо собаки в именах параметров.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Oracle и db.CreateParameters
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 29.04.08 15:29
Оценка:
Здравствуйте, der Igel, Вы писали:

DI>Использовать двоеточие вместо собаки в именах параметров.


странно, не помогло, та же самая ошибка
... << RSDN@Home 1.2.0 alpha 4 rev. 1084>>
Re[2]: Oracle и db.CreateParameters
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 29.04.08 16:14
Оценка:
Здравствуйте, der Igel, Вы писали:

DI>Использовать двоеточие вместо собаки в именах параметров.


после прохода под отладчиком сделал так и заработало:

     .SetCommand(@"
      INSERT INTO SUP_AUDIO_MESSAGE
        ( ID, CALL_ID, FROM_IP, CALL_DATE ) 
      VALUES 
            ( SUP_AUDIO_SEQ.NEXTVAL, :PCALL_ID, :PFROM_IP, :PCALL_DATE )",
      db.CreateParameters(msg))


... << RSDN@Home 1.2.0 alpha 4 rev. 1084>>
Oracle и db.CreateParameters
От: andrex Украина  
Дата: 29.04.08 16:25
Оценка: 28 (1)
#Имя: FAQ.rfd.oracle.CreateParameters
Здравствуйте, Odi$$ey, Вы писали:

OE>после прохода под отладчиком сделал так и заработало:


OE>
OE>     .SetCommand(@"
OE>      INSERT INTO SUP_AUDIO_MESSAGE
OE>        ( ID, CALL_ID, FROM_IP, CALL_DATE ) 
OE>      VALUES 
OE>            ( SUP_AUDIO_SEQ.NEXTVAL, :PCALL_ID, :PFROM_IP, :PCALL_DATE )",
OE>      db.CreateParameters(msg))
OE>


За эту штуку отвечает свойство ParameterPrefix у провайдера. Если сделать как то так, то должно работать без P:
            var p = new OracleDataProvider
                  {
                            ParameterPrefix = null
                        };
            AddDataProvider(p);
... << RSDN@Home 1.2.0 alpha rev. 788>>
Я бы изменил мир — но Бог не даёт исходников...
bltoolkit oracle rfd
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.