【发布时间】:2017-01-04 15:16:31
【问题描述】:
var oraConnectionString = new OracleConnectionStringBuilder(_connectionString);
using (var oraConnection = new OracleConnection(oraConnectionString.ConnectionString))
{
oraConnection.Open();
try
{
using (var command = new OracleCommand(sqlText, oraConnection))
{
command.Parameters.Clear();
command.BindByName = true;
command.Parameters.Add("node", _currentNode);
command.Parameters.Add("carrierId", CarrierId);
command.Connection.BeginTransaction();
command.ExecuteNonQuery();
command.CommandText = UtilityMethods.LoadTemplate("Resources/CreateCarrier.sql", "Carriers");
command.Parameters.Clear();
command.Parameters.Add("carrierName", CarrierName);
command.Parameters.Add("line1", Line1);
command.Parameters.Add("line2", Line2);
command.Parameters.Add("line3", Line3);
command.Parameters.Add("line4", Line4);
command.ExecuteNonQuery();
command.CommandText = UtilityMethods.LoadTemplate("Resources/GetCarrierId.sql", "Carriers");
CarrierId = Convert.ToString(command.ExecuteScalar());
if (CarrierId == null)
{
//TODO
}
command.Parameters.Clear();
command.CommandText = command.CommandText = UtilityMethods.LoadTemplate("Resources/AddCarrierToNode.sql", "Carriers");
command.Parameters.Add("node", _currentNode);
command.Parameters.Add("rank", Convert.ToInt32(Rank));
command.Parameters.Add("carrierId", Convert.ToInt32(CarrierId));
command.ExecuteNonQuery();
command.Transaction.Commit();
}
}
出于某种原因,CarrierId 返回 null。我能想到的唯一一件事是之前的 sql 命令的更改尚未提交。谁能告诉我你是否需要在每次执行之间提交?
【问题讨论】:
-
既然我们看不到你的 SQL 命令是什么,你怎么知道这不是那里的问题?
-
在 Oracle 会话中,一次提交足以保存在该提交之前完成的 DML 操作。
-
何时提交应完全由业务逻辑决定。