BLT是否支持Oracle存储过程?我尝试了许多方法,如下所述,让它工作,但没有运气。存储过程使用多个值更新表。这是存储过程,一个小的测试过程。
DROP PROCEDURE BETA_AUTO_UPDATE;
/
CREATE OR REPLACE PROCEDURE BETA_AUTO_UPDATE
(
AutoId IN NUMBER,
Rule IN NVARCHAR2,
Nam IN NVARCHAR2,
Loc IN NVARCHAR2
)
IS
BEGIN
UPDATE Beta_Auto
SET RuleGuid = Rule,
Name = Nam,
Location = Loc
WHERE Id=AutoId;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001, 'ERROR OCCURED DURING UPDATE');
END BETA_AUTO_UPDATE;
/我尝试了以下方法
DbManager.AddDataProvider(new OdpDataProvider());
DbManager OracleDb = new DbManager("BetaOracleDBConn");
Beta_Auto Betar = new Beta_Auto();
Betar.ID = 1;
Betar.Name = "Jim";
Betar.RuleGuid = "jlDKDKDKDKDKDKp";
Betar.Location = "LocDLDLDLDLDtor";
OracleDb.SetSpCommand("Beta_Auto_UPDATE",
OracleDb.CreateParameters(Betar)).ExecuteNonQuery();这不管用。
我试过了
[ActionName("UPDATE")]
public abstract void Update(Beta_Auto Auto);这不管用。
我试过了:
[SprocName("Beta_Auto_Update")]
public abstract void UpdateByParam(
[Direction.InputOutput("ID", "RuleGuid", "Name", "Location")] Beta_Auto Auto);这不管用。
[SprocName("Beta_Auto_Update")]
public abstract void UpdateByParam(int Id, string RuleGuid, string Name, string Location);我也尝试了一下:
[ActionName("Update")]
public abstract void UpdateByParam(int Id, string RuleGuid, string Name, string Location);这不管用。
将odp.net上的跟踪级别设置为7。看到正在进行调用,但看不到任何参数。将XE替换为企业级Oracle (认为这可能是一个许可问题,因为数据库大于5 5GB)。没有起作用。
创建新的用户、数据文件、表空间,并为其分配所有角色和权限,包括对用户执行任何过程。没有起作用。
我通过OracleCommand运行了一个标准的ado.net (非常长的缠绕)来调用存储过程,它完全调用并进行了更新。
我被难住了。以上所有功能都适用于SQL Server。
谢谢。scope_creep
发布于 2011-08-01 17:31:44
我是这样做的
var parameters = OracleDb.GetSpParameters("BETA_AUTO_UPDATE", true, true);
parameters.SetParamValue("pParam1", param1);
parameters.SetParamValue("pParam2", param2);
...
OracleDb.SetSpCommand("BETA_AUTO_UPDATE", parameters).ExecuteNonQuery();这是一个额外的往返过程,但因为我只使用存储过程进行几个大的批量更新,所以这并不重要(普通/简单的更新是通过Linq DML操作完成的)
https://stackoverflow.com/questions/6764989
复制相似问题