AFramework程序集说明(WORD无图片)

鉴于部分网友没有安装PDF文件阅读程序,故再贴一份文章《基于Remoting技术的三层架构设计》,欢迎提出意见及建议。

 

 

AFramework程序集说明

FangRonghua

2009.02

 

1简介

2 PersistenceManager类包含的方法

2.1 新增记录

2.2 更新记录

2.3 删除记录

2.4 单值查询

2.5 DataSet

2.6 取序列值

2.7 取实体对象

2.8 事务管理

2.9 调用存储过程

2.10 Remoting设置

3 QueryStatement类所包含的方法

3.1 ToString()方法和ToCountString()方法

4 代码示例

4.1 新增数据

4.2 更新数据

4.3 删除数据

4.4 单值查询

4.5 DataSet

4.6 取序列值

4.7取实体对象

4.8 调用存储过程

4.9 同一数据库的事务操作

4.10 分布式数据库的事务操作

4.11 存图片

4.12 取图片

 

 

 

 

 

 

 

 

1简介

 

文件名:AFramework.dll

命名空间:AFramework

AFramework是持久层的一种实现,封装了应用程序常用的数据库操作。运用该组件时,主要运用两个类:PersistenceManager、PersistenceManagerNServer、QueryStatement。

 

PersistenceManagerNServer 是在分布式环境下使用的。

调用其方法时必须指定使用哪台服务器。可配置多台服务器,可将服务器设定编号为12…N

目前存在的问题是未完全解决分布式事务管理。如果只是从多台数据库查询数据是没问题的。

 

PersistenceManager是对PersistenceManagerNServer中编号为1的服务器操作,即本地数据库应用服务程序。

 

 

代码生成工具目前支持的数据类型:VARCHAR2、CHAR、NUMBER、FLOAT、DATE、BLOB、LONG RAW

AFramework目前支持的类型为String、Decimal、DateTime、Byte[]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 PersistenceManager类包含的方法

 

 

 

2.1 新增记录

命名空间:AFramework

类名:PersistenceManager

 

方法

Int Insert(string sql)

名称

新增记录 (sql语句版)

说明

创建一个新的Oralce连接,执行该sql语句,完成操作后自动提交,并关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

Int Insert(string sql,int sessionID)

名称

新增记录 (sql语句+事务版)

说明

使用指定的会话连接,执行该sql语句,完成操作后不提交,不关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

Int Insert(object model)

名称

新增记录 (DataModel版)

说明

创建一个新的Oralce连接,根据model插入数据,完成操作后自动提交,并关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

Int Insert(object model, int sessionID)

名称

新增记录 (DataModel+事务版)

说明

使用指定的会话连接,根据model插入数据,完成操作后不提交,不关闭连接。遇到异常则抛出异常并自动回滚。

2.2 更新记录

命名空间:AFramework

类名:PersistenceManager

 

方法

Int Update(string sql)

名称

更新记录 (sql语句版)

说明

创建一个新的Oralce连接,执行该sql语句,完成操作后自动提交,并关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

Int Update(string sql,int sessionID)

名称

更新记录 (sql语句+事务版)

说明

使用指定的会话连接,执行该sql语句,完成操作后不提交,不关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

Int Update(object model, QueryStatement query)

名称

更新记录 (DataModel版)

说明

创建一个新的Oralce连接,根据model及query更新数据,完成操作后自动提交,并关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

Int Update(object model, QueryStatement query, int sessionID)

名称

更新记录 (DataModel+事务版)

说明

使用指定的会话连接,根据model及query更新数据,完成操作后不提交,不关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

Bool UpdateDataSet(DataSet ds,String tableName)

名称

更新DataSet

说明

创建一个新的Oralce连接,使用一个事务处理。更新指定表的DataSet数据,包含Insert、Update、Delete功能。

 

2.3 删除记录

命名空间:AFramework

类名:PersistenceManager

 

 

方法

Int Delete(string sql)

名称

删除记录 (sql语句版)

说明

创建一个新的Oralce连接,执行该sql语句,完成操作后自动提交,并关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

Int Delete(string sql, int sessionID)

名称

删除记录 (sql语句+事务版)

说明

使用指定的会话连接,执行该sql语句,完成操作后不提交,不关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

Int Delete(QueryStatement query)

名称

删除记录 (DataModel版)

说明

创建一个新的Oralce连接,根据query删除数据,完成操作后自动提交,并关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

Int Delete(QueryStatement query, int sessionID)

名称

删除记录 (DataModel+事务版)

说明

使用指定的会话连接,根据query删除数据,完成操作后不提交,不关闭连接。遇到异常则抛出异常并自动回滚。

 

2.4 单值查询

命名空间:AFramework

类名:PersistenceManager

 

方法

Object GetSingleValue(string sql)

名称

单值查询 (sql语句版)

说明

创建一个新的Oralce连接,执行该sql语句,完成操作后自动提交,并关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

Object GetSingleValue(string sql, int sessionID)

名称

单值查询 (sql语句+事务版)

说明

使用指定的会话连接,执行该sql语句,完成操作后不提交,不关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

Object GetSingleValue(string colName,QueryStatement query)

名称

单值查询 (DataModel版)

说明

创建一个新的Oralce连接,根据query构造条件,查询指定字段,完成操作后自动提交,并关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

Object GetSingleValue(string colName ,QueryStatement query, int sessionID)

名称

单值查询 (DataModel+事务版)

说明

使用指定的会话连接,根据query构造条件,查询指定字段,完成操作后不提交,不关闭连接。遇到异常则抛出异常并自动回滚。

 

 

 

 

2.5 取DataSet

命名空间:AFramework

类名:PersistenceManager

 

方法

DataSet GetDataSet(string sql)

名称

取DataSet (sql语句版)

说明

创建一个新的Oralce连接,执行该sql语句,完成操作后自动提交,并关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

DataSet GetDataSet(string sql,int sessionID)

名称

取DataSet (sql语句+事务版)

说明

使用指定的会话连接,执行该sql语句,完成操作后不提交,不关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

DataSet GetDataSet(QueryStatement query)

名称

取DataSet (DataModel版)

说明

创建一个新的Oralce连接,根据query查询数据,完成操作后自动提交,并关闭连接。遇到异常则抛出异常并自动回滚。

 

方法

DataSet GetDataSet(QueryStatement query, int sessionID)

名称

取DataSet (DataModel+事务版)

说明

使用指定的会话连接,根据query查询数据,完成操作后不提交,不关闭连接。遇到异常则抛出异常并自动回滚。

 

2.6 取序列值

命名空间:AFramework

类名:PersistenceManager

方法

decimal GetSequenceNextVal(string strSequenceName)

名称

取序列值

说明

创建一个新的Oralce连接,完成操作后关闭连接。遇到异常则抛出异常。

 

方法

decimal GetSequenceNextVal(string strSequenceName,int sessionId)

名称

取序列值

说明

使用指定的会话连接,完成操作后不提交,不关闭连接。遇到异常则抛出异常。

 

 

 

2.7 取实体对象

命名空间:AFramework

类名:PersistenceManager

方法

object GetObject(QueryStatement query)

名称

取实体对象

说明

创建一个新的Oralce连接,完成操作后关闭连接。遇到异常则抛出异常。无相应实体时返回null

 

方法

object GetObject(QueryStatement query, int sessionId)

名称

取实体对象

说明

使用指定的会话连接,根据query查询。遇到异常则抛出异常。无相应实体时返回null

 

方法

object GetObjects(QueryStatement query)

名称

取实体对象数组

说明

创建一个新的Oralce连接,完成操作后关闭连接。遇到异常则抛出异常并自动回滚。无相应实体时返回null

 

方法

object GetObject(QueryStatement query, int sessionId)

名称

取实体对象数组

说明

使用指定的会话连接,根据query查询。遇到异常则抛出异常并自动回滚。无相应实体时返回null

 

2.8 事务管理

命名空间:AFramework

类名:PersistenceManager

 

方法

Int SessionOpenSession()

名称

创建并打开会话

说明

连接Oracle,创建并打开会话。创建成功则返回SessioinID,在事务管理时用到该ID,以标识该会话。创建失败抛出异常。

 

方法

bool SessionBeginTransaction(int sessionID)

名称

开启指定会话的事务

说明

开启成功,返回true;若失败,抛出异常。

 

方法

bool SessionCommitTransaction(int sessionID)

名称

提交指定会话的事务

说明

提交成功,返回true;若失败,抛出异常。

 

方法

bool SessionRollbackTransaction(int sessionID)

名称

回滚指定会话的事务

说明

回滚成功,返回true;若失败,返回false。不抛出异常。调用一次即可。

服务器端操作数据发生异常时自动回滚。客户端调用本方法时与服务器自动回滚不会冲突。

 

方法

bool SessionCloseSession(int sessionID)

名称

关闭会话

说明

关闭成功,返回true;若失败,返回false。不抛出异常。调用一次即可。

 

2.9 调用存储过程

方法

String ExeStoredProcedure(string procedureName,OracleParameter[] pars)

名称

执行存储过程

说明

若需要返回值则需要在parameters中定义一个Direction为Output或InputOutput类型的参数,该参数必须为字符串类型。

若parameters长度为0,则认为无输入输出参数,只调用该存储过程。

执行过程出错将抛出异常。

 

2.10 Remoting设置

方法

void SetRemotingServerIP(string ip)

名称

设置Remoting服务器IP地址

说明

如:127.0.0.1

 

方法

void SetRemotingServerPort(string port)

名称

设置Remoting服务器的服务端口

说明

如:6868

本设计支持Tcp、Http通道传输。若采用Http可设置为80。

 

方法

void SetRemotingServerChannelType(string HttpOrTcp)

名称

设置Remoting服务器的服务类型

说明

支持Tcp、Http通道传输。建议采用Tcp通道,效率高。

输入的值为“Tcp”或者“Http”

3 QueryStatement类所包含的方法

 

该类的设计思想来源与面向对象的要求。根据实践经验,直接写SQL语句比由FilterOrderBy等方法构造出where条件来得更直接。调试程序时用到以下两个方法就可以了。

 

3.1 ToString()方法和ToCountString()方法

方法

string ToString()

名称

取查询语句

说明

返回的字符串格式为select 字段名1、字段名2 from 表名 where …

实体对象赋值的字段均作为条件。若实体对象未赋值则无where条件。

 

方法

string ToCountString()

名称

返回统计记录数语句

说明

返回的字符串格式为select count(*) from 表名 where …

实体对象赋值的字段均作为条件。若实体对象未赋值则无where条件。

 

4 代码示例

可参看程序:AFW示例代码

4.1 新增数据

//新增数据 DataModel版 建议使用

//分两步

//第一步:构造新增数据的model

AFW_Test_Three three = new AFW_Test_Three();

//three.ID3 = id;                                      //由触发器生成

three.COL4 = "这是字段4";

three.COL5 = "这是字段5";

 

//第二不:执行操作

//用PersistenceManager类操作数据库时务必捕捉异常 以下不再作注释

try

{

PersistenceManager.Insert(three);        

}

catch (Exception ex)

{

    MessageBox.Show(ex.Message);

}

 

//新增数据 sql语句版

string sql = "INSERT INTO AFW_Test_Three(COL4,COL5) VALUES('这是字段4','这是字段5')";

 

try

{

    PersistenceManager.Insert(sql);

}

catch (Exception ex)

{

    MessageBox.Show(ex.Message);

}

 

 

 

4.2 更新数据

//更新数据 DataModel版 建议使用

//分三步

//第一步:需要更新的字段均赋值给model

AFW_Test_Three model = new AFW_Test_Three();

model.COL4 = "字段4更新后的内容";

model.COL5 = "字段4更新后的内容";

 

//第二步:构造更新条件

AFW_Test_Three where = new AFW_Test_Three();

where.ID3 = 2609;

QueryStatement query = new QueryStatement(where);

 

//可查看更新条件

Console.WriteLine(query.GetWhereAndFilter());

 

//第三步:执行操作

try

{

    PersistenceManager.Update(model, query);

}

catch (Exception ex)

{

    MessageBox.Show(ex.Message);

}

 

////sql语句版的略

 

AFW_Test_Four four = new AFW_Test_Four();

four.COL2 = "字段2";

//four.COL3 = 3;

//four.COL4 = System.DateTime.Now;

 

//byte[]赋值示例 将文件保存至数据库

FileStream fs = new FileStream("C:\\1.bmp", FileMode.Open, FileAccess.Read);

BinaryReader br = new BinaryReader(fs);

byte[] photo = br.ReadBytes((int)fs.Length);

four.COL5 = photo;                  

 

AFW_Test_Four w = new AFW_Test_Four();

w.ID1 = 2642;

QueryStatement q = new QueryStatement(w);

try

{

    PersistenceManager.Update(four, q);

}

catch (Exception ex2)

{

    MessageBox.Show(ex2.Message);

}

4.3 删除数据

//删除数据 DataModel版 分两步

//第一步:构造删除条件

AFW_Test_Three where = new AFW_Test_Three();

where.ID3 = 2609;

QueryStatement query = new QueryStatement(where);

 

//第二步:执行操作

try

{

    PersistenceManager.Delete(query);

}

catch (Exception ex)

{

    MessageBox.Show(ex.Message);

}

 

//sql语句版的更简捷 建议使用

//直接写sql语句

4.4 单值查询

//取单值 DataModel版

//分两步

//第一步:构造条件

AFW_Test_Three where = new AFW_Test_Three();

where.ID3 = 2610;

QueryStatement query = new QueryStatement(where);

//第二步:执行操作

try

{

    object obj = PersistenceManager.GetSingleValue("col4",query); //返回数据的第一行第一列

}

catch (Exception ex)

{

    MessageBox.Show(ex.Message);

}

 

//sql语句版的更简捷 建议使用

string sql = "SELECT COUNT(*) FROM TAB";

try

{

    object obj = PersistenceManager.GetSingleValue(sql);     //返回数据的第一行第一列

}

catch (Exception ex)

{

    MessageBox.Show(ex.Message);

}

 

4.5 DataSet

//取DataSet DataModel版

//取全部数据 等效sql语句:SELECT col1,col2,...,coln from AFW_Test_Three

AFW_Test_Three model = new AFW_Test_Three();

//model.ID1 = 101;                    //若对字段赋值 将作为where条件

QueryStatement query = new QueryStatement(model);

try

{

    DataSet ds = PersistenceManager.GetDataSet(query);

}

catch (Exception ex)

{

   Console.WriteLine(ex.Message);

}

 

//sql语句 略

 

4.6 取序列值

//序列值

try

{

    decimal dec = PersistenceManager.GetSequenceNextVal("AFW_TEST_TWO_seq");

}

catch (Exception ex)

{

    Console.WriteLine(ex.Message);

}

 

//若只是取出一个序列值 赋给记录 此时可以不共享会话 这样操作比较简便 如:

try

{

    decimal dec = PersistenceManager.GetSequenceNextVal("AFW_TEST_TWO_seq");

    AFW_Test_Three model = new AFW_Test_Three();

    model.ID3 = dec;

    PersistenceManager.Insert(model);

}

catch (Exception ex)

{

    Console.WriteLine(ex.Message);

}

4.7取实体对象

//取实体对象

AFW_Test_Four model = new AFW_Test_Four();

model.ID1 = 2639;                                   //最多只能有一条记录

QueryStatement query = new QueryStatement(model);

object obj = PersistenceManager.GetObject(query);

if (obj != null)                                    //无记录时返回null

{

    AFW_Test_Four m = (AFW_Test_Four)obj;

    Console.WriteLine(m.ID1.ToString());

}

 

//取实体对象数组

AFW_Test_Four model = new AFW_Test_Four();

QueryStatement query = new QueryStatement(model);

object[] objArray = PersistenceManager.GetObjects(query);           //无记录时返回null

AFW_Test_Four[] modelArray = new AFW_Test_Four[objArray.Length];

for (int i = 0; i < modelArray.Length; i++)

{

    modelArray[i] = (AFW_Test_Four)objArray[i];

}

 

for(int i=0; i < modelArray.Length;i++)

{

    Console.WriteLine(modelArray[i].ID1.ToString());

}

4.8 调用存储过程

//调存储过程

 

//无任何参数

OracleParameter[] p = new OracleParameter[0];

try

{

    string str = PersistenceManager.ExeStoredProcedure("proc_afw_test3", p);

    Console.WriteLine("调存储过程 无参数 ok");

}

catch (Exception ex)

{

    MessageBox.Show(ex.Message);

}

 

//仅有输出参数

//OracleParameter[] p = new OracleParameter[1];

p = new OracleParameter[1];

p[0] = new OracleParameter();

p[0].ParameterName = "result";

p[0].OracleType = OracleType.VarChar;

p[0].Direction = ParameterDirection.Output;

p[0].Size = 2000;

try

{

    string str = PersistenceManager.ExeStoredProcedure("proc_afw_test1", p);

    Console.WriteLine("调存储过程 仅有输出参数 ok");

}

catch (Exception ex)

{

    MessageBox.Show(ex.Message);

}

 

//仅有入参数 有输入输出参数的情况 差不多

//OracleParameter[] p = new OracleParameter[4];

p = new OracleParameter[4];

p[0] = new OracleParameter();

p[0].ParameterName = "contract_id";

p[0].OracleType = OracleType.VarChar;

p[0].Direction = ParameterDirection.Input;

p[0].Value = "00";

 

p[1] = new OracleParameter();

p[1].ParameterName = "contractor_name";

p[1].OracleType = OracleType.VarChar;

p[1].Direction = ParameterDirection.Input;

p[1].Value = "11";

 

p[2] = new OracleParameter();

p[2].ParameterName = "epscode";

p[2].OracleType = OracleType.VarChar;

p[2].Direction = ParameterDirection.Input;

p[2].Value = "22";

 

p[3] = new OracleParameter();

p[3].ParameterName = "result";

p[3].OracleType = OracleType.VarChar;

p[3].Direction = ParameterDirection.Output;

p[3].Size = 2000;

 

try

{

    string str = PersistenceManager.ExeStoredProcedure("proc_afw_test2", p);

    Console.WriteLine("调存储过程 ok");

}

catch (Exception ex)

{

    MessageBox.Show(ex.Message);

}

4.9 同一数据库的事务操作

int sessionID = 0;

try

{

    sessionID = PersistenceManager.SessionOpenSession();

    PersistenceManager.SessionBeginTransaction(sessionID);

 

    AFW_Test_One one = new AFW_Test_One();

 

    //ID1值要赋给表二、表三,所以不由触发器生成。

    one.ID1 = PersistenceManager.GetSequenceNextVal("AFW_TEST_ONE_seq",sessionID);

    one.COL2 = "这是字段2";

    one.COL3 = "这是字段3";

    one.COL4 = "这是字段4";

 

    PersistenceManager.Insert(one, sessionID);

 

    AFW_Test_Two two = new AFW_Test_Two();

    two.ID2 = PersistenceManager.GetSequenceNextVal("AFW_TEST_TWO_seq",sessionID);

    two.ID1 = one.ID1;

    two.COL3 = "这是字段3";

    two.COL4 = "这是字段4";

 

    PersistenceManager.Insert(two, sessionID);

 

    AFW_Test_Three three = new AFW_Test_Three();

    //three.ID3 = id;       //由触发器生成

    three.ID1 = one.ID1;

    three.ID2 = two.ID2;

    three.COL4 = "这是字段4";

 

    PersistenceManager.Insert(three, sessionID);

 

    PersistenceManager.SessionCommitTransaction(sessionID);

    PersistenceManager.SessionCloseSession(sessionID);

 

    Console.WriteLine("新增数据成功!");

}

catch (Exception ex)

{

    PersistenceManager.SessionRollbackTransaction(sessionID);

    Console.WriteLine("新增数据失败 " + ex.Message);

}

4.10 分布式数据库的事务操作

//PersistenceManager即为编号1应用服务器地址

//PersistenceManager.SetRemotingServerIP("10.164.72.164");

//PersistenceManager.SetRemotingServerPort("6969");

//PersistenceManager.SetRemotingServerChannelType("Tcp");

 

PersistenceManagerNServer.SetRemotingServerIP(2, "10.164.72.163");

PersistenceManagerNServer.SetRemotingServerPort(2, "6969");

PersistenceManagerNServer.SetRemotingServerChannelType(2, "Tcp");

 

int sessionID1 = 0;

int sessionID2 = 0;

try

{

 

    sessionID1 = PersistenceManager.SessionOpenSession();

    sessionID2 = PersistenceManagerNServer.SessionOpenSession(2);

 

    PersistenceManager.SessionBeginTransaction(sessionID1);

    PersistenceManagerNServer.SessionBeginTransaction(2, sessionID2);

 

    AFW_Test_One one = new AFW_Test_One();

 

    //ID1值要赋给表二、表三,所以不由触发器生成。

    one.ID1 = PersistenceManager.GetSequenceNextVal("AFW_TEST_ONE_seq",sessionID1);

    one.COL2 = "这是字段2";

    one.COL3 = "这是字段3";

    one.COL4 = "这是字段4";

 

    PersistenceManager.Insert(one, sessionID1);

    PersistenceManagerNServer.Insert(2, one, sessionID2);

 

    AFW_Test_Two two = new AFW_Test_Two();

    two.ID2 = PersistenceManager.GetSequenceNextVal("AFW_TEST_TWO_seq",sessionID1);

    two.ID1 = one.ID1;

    two.COL3 = "这是字段3";

    two.COL4 = "这是字段4";

 

    PersistenceManager.Insert(two, sessionID1);

    PersistenceManagerNServer.Insert(2, two, sessionID2);

 

    AFW_Test_Three three = new AFW_Test_Three();

    //three.ID3 = id;       //由触发器生成

    three.ID1 = one.ID1;

    three.ID2 = two.ID2;

    three.COL4 = "这是字段4";

 

    PersistenceManager.Insert(three, sessionID1);

    PersistenceManagerNServer.Insert(2, three, sessionID2);

 

    //--------------

    //目前这样有问题 不能保证都提交

    //尝试用COM+协调封装但没测试成功

    //根据二阶段提交协议算法 到时会改

    //对于只是从其它服务器取数据回来再处理 这样做完全可以满足要求了

    //从其它服务器取数据时 可以不开事务

 

    PersistenceManager.SessionCommitTransaction(sessionID1);

    PersistenceManagerNServer.SessionCommitTransaction(2,sessionID2);

   

    //--------------

 

 

    PersistenceManager.SessionCloseSession(sessionID1);

    PersistenceManagerNServer.SessionCloseSession(2, sessionID2);

 

}

catch (Exception ex)

{

    PersistenceManager.SessionRollbackTransaction(sessionID1);

    PersistenceManagerNServer.SessionRollbackTransaction(2, sessionID2);

    Console.WriteLine(ex.Message);

}

 

 

4.11 存图片

AFW_Test_Four four = new AFW_Test_Four();

four.COL2 = "字段2";

 

//byte[]赋值示例 将文件保存至数据库

FileStream fs = new FileStream("C:\\1.bmp", FileMode.Open, FileAccess.Read);

BinaryReader br = new BinaryReader(fs);

byte[] photo = br.ReadBytes((int)fs.Length);

four.COL5 = photo;

 

try

{

    PersistenceManager.Insert(four);

}

catch (Exception ex)

{

    MessageBox.Show(ex.Message);

}

4.12 取图片

//sql

string sql = "select COL5 from AFW_Test_Four where id1=2670";

try

{

    DataSet ds = PersistenceManager.GetDataSet(sql);

    byte[] b = (byte[])ds.Tables[0].Rows[0]["COL5"];

    FileStream fs = new FileStream("D:\\2.bmp", FileMode.OpenOrCreate);

    fs.Write(b, 0, b.Length);

    fs.Close();

}

catch (Exception ex)

{

    MessageBox.Show(ex.Message);

}

 

//object

AFW_Test_Four model = new AFW_Test_Four();

model.ID1 = 2670;

 

QueryStatement query = new QueryStatement(model);

 

try

{

    AFW_Test_Four four = (AFW_Test_Four)PersistenceManager.GetObject(query);

    if (four != null)

    {

        byte[] b = four.COL5;

        FileStream fs = new FileStream("D:\\3.bmp", FileMode.OpenOrCreate);

        fs.Write(b, 0, b.Length);

        fs.Close();

    }

}

catch (Exception ex)

{

    MessageBox.Show(ex.Message);

}

 

联系方式:QQ652182937

End

posted on 2009-11-03 10:04  水手0745  阅读(466)  评论(1编辑  收藏  举报

导航