Непойму чего не так с 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 проходит без ошибок. Как полечить и в чем тут дело?
Odi$$ey wrote:
> Если заменить @CALL_ID, @FROM_IP, @CALL_DATE на строки с параметрами, а
> db.CreateParameters(msg) выбросить, то все вставляется без ошибок. Таже
> самая db.CreateParameters(msg) для того же класса с MSSQL проходит без
> ошибок. Как полечить и в чем тут дело?
Использовать двоеточие вместо собаки в именах параметров.
Posted via RSDN NNTP Server 2.1 beta
Здравствуйте, der Igel, Вы писали:
DI>Использовать двоеточие вместо собаки в именах параметров.
странно, не помогло, та же самая ошибка
... << RSDN@Home 1.2.0 alpha 4 rev. 1084>>
Здравствуйте, 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>>
Здравствуйте, 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>>