VS.NET2005 beta2 中DataSet的二进制序列化

王朝c#·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

最近用VS.NET2005 beta2做了个小工具试用了一下,的确是方便易用啊,其实我VS.NET2003都没怎么用过.不过就是喜欢尝鲜,没办法(不知道是不是有很多人跟我一样,看到新出的东西就想拿来试一试,搞得我的操作系统总是坏的极快).当然,我用VS.NET2005还有一个原因是它提供了SerialPort类来操作串口,跟一些嵌入式系统的串口通讯更方便.

在使用的过程中发现一个小问题,由于只是小工具,不想使用数据库,所以选用了DataSet的Untyped dataset功能,来存取Binary文件,结果在使用DataTable.Find函数的时候总是找不到记录.我的代码是这样的:

public void Create()

{

dataSet = new DataSet();

dataSet.RemotingFormat = SerializationFormat.Binary;

dataTable = new DataTable();

dataSet.Tables.Add(dataTable);

dataTable.Columns.Add(new DataColumn("card_no"));

dataTable.Columns.Add(new DataColumn("member_no"));

dataTable.Columns.Add(new DataColumn("serial_no"));

dataTable.Columns.Add(new DataColumn("expiry_date", Type.GetType("System.DateTime")));

DataColumn[] keys = new DataColumn[1];

keys[0] = dataTable.Columns["serial_no"];

dataTable.PrimaryKey = keys;

}

public void Open(String fileName)

{

if (File.Exists(fileName))

{

BinaryFormatter bf = new BinaryFormatter();

FileStream fs = new FileStream(fileName, FileMode.Open);

try

{

//dataSet.ReadXml(fileName);

//dataSet.AcceptChanges();

dataSet = (DataSet)bf.Deserialize(fs);

dataSet.AcceptChanges();

}

finally

{

fs.Close();

}

public void Save(String fileName)

{

if (dataSet.HasChanges())

{

BinaryFormatter bf = new BinaryFormatter();

FileStream fs = new FileStream(fileName, FileMode.Create);

try

{

//dataSet.WriteXml(fileName);

bf.Serialize(fs, dataSet);

dataSet.AcceptChanges();

}

finally

{

fs.Close();

}

}

}

用dataTable.Rows.Find()的时候,明明Table中有要找的数据,却始终返回null,而使用ReadXml,WriteXml函数操作Xml格式来存储就没问题(就是漫一点,这是我想用Binary格式的原因).不知是不是我忽略了某些步骤,MSDN2上的说明还是有点简单啊,半天没找来答案.期等正式版!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航