А почему запись вставляется, в БД ID наращивается, но после выполнения msg.ID все равно 0?
public class MessageData
{
[MapField("ID")]
public Int64 ID;
[MapField("CALL_ID")]
public string CallID;
}
OracleDataProvider p = new OracleDataProvider();
p.ParameterPrefix = null;
DbManager.AddDataProvider(p);
DbManager.AddConnectionString("Oracle", "Data Source=alias;User ID=user;Password=password;");
MessageData msg = new MessageData();
msg.CallID = "lsakxnsaljknsalk";
using(DbManager db = new DbManager())
{
db
.SetCommand(@"
INSERT INTO SUP_AUDIO_MESSAGE
( ID, CALL_ID )
VALUES
( SUP_AUDIO_SEQ.NEXTVAL, :CALL_ID )
RETURNING ID INTO :ID",
db.CreateParameters(msg))
.ExecuteNonQuery();
}
... << RSDN@Home 1.2.0 alpha 4 rev. 1084>>
Здравствуйте, Odi$$ey, Вы писали:
OE>А почему запись вставляется, в БД ID наращивается, но после выполнения msg.ID все равно 0?
OE> OE> using(DbManager db = new DbManager())
OE> {
OE> db
OE> .SetCommand(@"
OE> INSERT INTO SUP_AUDIO_MESSAGE
OE> ( ID, CALL_ID )
OE> VALUES
OE> ( SUP_AUDIO_SEQ.NEXTVAL, :CALL_ID )
OE> RETURNING ID INTO :ID",
OE> db.CreateParameters(msg))
OE> .ExecuteNonQuery();
OE> }
OE>
Мда, телепатический модуль BLToolkit'а нужно переписывать с нуля.
А пока можно явно указать, что параметр ID должен вернуться с сервера.
Кстати, то, что его нужно отмапить обратно в
msg тоже нужно указать явно:
using(DbManager db = new DbManager())
{
db
.SetCommand(@"
INSERT INTO SUP_AUDIO_MESSAGE
( ID, CALL_ID )
VALUES
( SUP_AUDIO_SEQ.NEXTVAL, :CALL_ID )
RETURNING ID INTO :ID",
db.CreateParameters(msg, new string[] { "ID" }, null, null))
.ExecuteNonQuery(msg);
}
Дополнительные примеры можно подсмотреть
здесь.
... << RSDN@Home 1.2.0 alpha 2 rev. 872>>
Здравствуйте, Блудов Павел, Вы писали:
БП>А пока можно явно указать, что параметр ID должен вернуться с сервера.
БП>Кстати, то, что его нужно отмапить обратно в msg тоже нужно указать явно:
БП>БП>using(DbManager db = new DbManager())
БП>{
БП> db
БП> .SetCommand(@"
БП> INSERT INTO SUP_AUDIO_MESSAGE
БП> ( ID, CALL_ID )
БП> VALUES
БП> ( SUP_AUDIO_SEQ.NEXTVAL, :CALL_ID )
БП> RETURNING ID INTO :ID",
БП> db.CreateParameters(msg, new string[] { "ID" }, null, null))
БП> .ExecuteNonQuery(msg);
БП>}
БП>
сделал так, запись вставляется, но ID в msg всегда 0
Здравствуйте, Odi$$ey, Вы писали:
БП>>БП>> db
БП>> .SetCommand(@"
БП>> .ExecuteNonQuery(msg);
БП>>
OE>сделал так, запись вставляется, но ID в msg всегда 0
Значит нужно пройтись отладчиком через ExecuteNonQuery (точнее через MapOutputParameters) и посмотреть что с чем разъехалось.
Здравствуйте, Блудов Павел, Вы писали:
БП>Значит нужно пройтись отладчиком через ExecuteNonQuery (точнее через MapOutputParameters) и посмотреть что с чем разъехалось.
хм, в CreateParameters() ID добавляется в
paramList с
Direction = ParameterDirection.Output, но ни в какие DbManager::MapOutputParameters программа ни до ни после не попадает
з.ы. BLToolkit у меня r574 из
http://bl-toolkit.googlecode.com/svn/trunk
Здравствуйте, Odi$$ey, Вы писали:
OE>но ни в какие DbManager::MapOutputParameters программа ни до ни после не попадает
А в DbManager::ExecuteNonQuery(object obj) попадает или нет?
Если нет, но попадает в DbManager::ExecuteNonQuery(), то очень-очень внимательно перечитай
вот этоАвтор: Блудов Павел
Дата: 30.04.08
сообщение
OE>хм, в CreateParameters() ID добавляется в paramList с Direction = ParameterDirection.Output, но ни в какие DbManager::MapOutputParameters программа ни до ни после не попадает
а, стоп, сам дурак, в ExecuteNonQuery msg не вписал