原创Winform快速开发框架平台Oracle版本(三层架构+C#.NET+Oracle数据库)
作者:作者不详  发布日期:2020-03-16 17:54:34

C/S架构 Winform快速开发框架平台Oracle版本V5.0

适用开发 适用开发:制造、服务、零售、商贸等行业的ERP、MRP、MES、CRM、MIS、HIS、POS数据管理应用系统
运行平台 运行平台:Windows + .NET Framework 4.5
开发工具 开发工具:Visual Studio 2015+,C#语言
数据库 数据库:Microsoft SQLServer 2008R2+(支持多数据库:Oracle/MySql)


原创Winform快速开发框架平台Oracle版本(三层架构+C#.NET+Oracle数据库)


 产品介绍 

    C/S系统开发框架旗舰版为软件团队提供强大的技术支撑以及快速开发能力,开发框架集成大量的通用开发包与工具实用类,提供丰富的例子,借助技术文档、网站资源、演示源码以及在线技术指导,用户能快速投入研发自己的项目。自2007年首发开发框架以来,我们成功积累了2000多位用户,其中包括数百家软件公司或大型集团企业。经过十年的产品迭代升级,最新旗舰版技术更成熟,性能更稳定,产出效率更高!

    配套的代码生成器工具能自动生成界面(FORM)、业务层(BLL)、数据层(DAL)、模型(Model)、报表(Report)以及业务模块(Class Library DLL)的源代码,极大地提高开发效率、节约开发时间、降低项目成本。据多年项目实践统计,开发框架基本能完成项目大概60%以上的工作量。





C/S系统快速开发框架旗舰版V5.0(Ultimate Edition)


贴图图片-原创Winform快速开发框架平台Oracle版本


Oracle版C/S系统快速开发框架旗舰版V5.0源码目录说明:

1. 软件授权注册系统Oracle版本数据库:CSFramework.Authorization.Oracle.db
2. 软件授权注册系统Oracle版本源码:CSFramework.Authorization-Source-Oracle
3. C/S 系统版本自动升级软件V1.0 Oracle版本源码:CSFrameworkV5.AutoUpgrader
4. 客户端主程序演示版源码:CSFrameworkV5.ClientDemo
5. 客户端主程序开发架构源码:CSFrameworkV5.ClientFoundation
6. C/S框架代码生成器Oracle版本源码:CSFrameworkV5.CodeGenerator
7. C/S框架核心类库:CSFrameworkV5.Core
8. 服务端源码:CSFrameworkV5.Server
9. 数据库连接工具Oracle版本:CSFrameworkV5.SqlConnector


导出Oracle数据库:


SQL Code:

--导出系统数据库
expdp YG01/test@orcl directory=DATA_PUMP_DIR dumpfile=YG01_20190627.DMP logfile=YG01.log schemas=YG01
--导出业务数据库
expdp YG02/test@orcl directory=DATA_PUMP_DIR dumpfile=YG02_20190627.DMP logfile=YG02.log schemas=YG02


用户:YG01,密码:test,对应开发框架系统数据库。
用户:YG02,密码:test,对应业务数据库。


贴图图片-原创Winform快速开发框架平台Oracle版本-导出YG01


贴图图片-原创Winform快速开发框架平台Oracle版本-导出YG02


Oracle数据库备份文件:

贴图图片-原创Winform快速开发框架平台Oracle版本1



Winform C/S架构快速开发框架Oracle版本与SQL版本区别:

1. 数据库差异巨大,SQL语法,存储过程、视图、函数、数据类型等。

2. 字段名称大小写问题,.NET区分大小写,数据编辑组件绑定字段问题,比如GridColumn.FieldName。

3. 基于ADO.NET数据访问层改动,存储过程调用方式。

4. DbCommand参数差异,Oracle是":",SqlServer是"@"

5. 返回数据必须定义Cursor参数:REF CURSOR类型。

6. 获取服务器时间函数、GUID函数、触发器等有所不同。

7. 处理自增字段。Oracle没有自增字段类型(SqlServer是IDENTITY),因此需要使用触发器维护自增字段。

8. Oracle内部权限机制控制用户数据查询,sp_SetContext存储过程。



Oracle存储过程参考:

SQL Code:

CREATE OR REPLACE PROCEDURE sp_QueryOutstandingAP(
   v_InvoiceNo
VARCHAR2, --发票编号,用于查询单张发票的Outstanding
  
v_SupplierCode VARCHAR2,--客户编号
  
v_FromDate VARCHAR2, --起始日期:YYYYMMDD
  
v_ToDate VARCHAR2, --结束日期1:YYYYMMDD
  
v_EndDate VARCHAR2, --结束日期2:YYYYMMDD
  
Pkg_Return1 Out Pkg_Retern.Pkg_Return
)
AS
BEGIN
  
  
--sql代码段,省略。。。。
  

  
END;
  
  
//来源:C/S框架网(www.csframework.com) QQ:23404761


注意:若要返回多张表,需要定义多个Pkg_Return参数,如:Pkg_Return1, Pkg_Return2等等...


Oracle存储过程返回资料表的Pkg_Retern.Pkg_Return包(package)类型定义:

SQL Code:

create or replace package PKG_RETERN is
TYPE tb_MyUser
IS REF CURSOR;
TYPE pkg_return
IS REF CURSOR;
TYPE pkg_return1
IS REF CURSOR;
TYPE pkg_return2
IS REF CURSOR;
TYPE pkg_return3
IS REF CURSOR;
end PKG_RETERN;

//来源:C/S框架网(www.csframework.com) QQ:23404761



Oracle版本数据访问层调用存储过程实例:


C# Code:

/// <summary>
/// 按条件从申购单主表获取数据
/// </summary>
public System.Data.DataTable Query(QueryBusinessBase P)
{
  CommandHelper sp
= _Database.CreateSqlProc("usp_IO_Search");
  sp.AddParam(
"v_DocNoFrom", DbType.String, P.DocNoFrom);
  sp.AddParam(
"v_DocNoTo", DbType.String, P.DocNoTo);
  sp.AddParam(
"v_DocDateFrom", DbType.DateTime, ConvertEx.ToSqlDateTime(P.DocDateFrom));
  sp.AddParam(
"v_DocDateTo", DbType.DateTime, ConvertEx.ToSqlDateTime(P.DocDateTo));
  
if (Globals._IsOracle) sp.AddParamOracleCursor("Pkg_Return1");
  
return _Database.GetTable( sp.Command, tb_IO.__TableName);
}

//来源:C/S框架网(www.csframework.com) QQ:23404761



CSFramework.DB组件OracleDatabase类的SetContext方法:


C# Code:

/// <summary>
/// Oracle内部权限机制控制用户数据查询
/// </summary>
/// <param name="connection"></param>
/// <returns></returns>
public int SetContext(OracleConnection connection)
{
  
try
  {
    OracleCommand cmd
= new OracleCommand("sp_SetContext");
    cmd.Connection
= connection;
    cmd.CommandType
= CommandType.StoredProcedure;
    cmd.Parameters.Add(
"In_Userid", DatabaseOracle.CurrentUserID);
    
int iValue = cmd.ExecuteNonQuery();
    
return iValue;
  }
  
catch (System.Exception ex)
  {
    
throw ex;
  }
}

//来源:C/S框架网(www.csframework.com) QQ:23404761



Oracle sp_SetContext存储过程:


SQL Code:

CREATE OR REPLACE PROCEDURE sp_SetContext(In_Userid VARCHAR2)
IS
v_UserID
VARCHAR2(20);
v_IsRoot
VARCHAR2(10);
v_schema
varchar2(50);
begin
select SYS_CONTEXT('USERENV', 'SESSION_USER') into v_schema from dual;
if v_schema = 'DBUSRSYS' then
return;
end if;
pkg_Context.Set_Context(
'UserID', Nvl(In_Userid,'99999'));
pkg_Context.Set_Context(
'ISALL',v_IsRoot);
END sp_SetContext;


//来源:C/S框架网(www.csframework.com) QQ:23404761



PACKAGE YG01.pkg_CONTEXT:


SQL Code:

CREATE OR REPLACE PACKAGE YG01.pkg_CONTEXT IS
--建立Context […]
--Create OR REPLACE context ERP_CONTEXT using PKG_CONTEXT ;-- ACCESSED GLOBALLY
--查询Context
--SELECT Sys_Context('ERP_CONTEXT','TYPE') FROM DUAL;
PROCEDURE Set_Context(In_Conditionid IN VARCHAR2, In_Conditionvalue IN VARCHAR2);
END;

//来源:C/S框架网(www.csframework.com) QQ:23404761



创建OracleConnection调用SetContext:


C# Code:

DbConnection connection = null;
try
{
  
if (cmd.Connection == null)
  {
    cmd.Connection
= CreateConnection();
    SetContext(cmd.Connection
as OracleConnection);
  }
  
return cmd.ExecuteReader();
}
finally
{
  Close(connection);
}

//来源:C/S框架网(www.csframework.com) QQ:23404761


上面部分代码来自CSFramework.DB组件

C#多数据库组件包支持MSSQL+Oracle+MySQL+用户操作手册|C/S框架网

参考:C#多数据库组件包支持MSSQL+Oracle+MySQL





扫一扫加微信:
 
上一篇 下一篇