C#读取二进制文件入数据库

读取二进制文件入数据库我分为三个步骤:
1,读取二进制文件入结构体,当然定义结构体之前必须知道二进制文件存储的方式是什么,否则将读出乱码来
在c#中定义有固定大小的结构体域其他语言不同的是得费点事拉
在结构体内部变量中声明指定大小的变量这样来声明
以下是本人声明的结构体例子
///


/// 消费账单结构体
///

public struct UseBill_InfoTemp
{
[MarshalAs(UnmanagedType.U1, SizeConst = 8)]
public byte[] usebill_id;//账单id
[MarshalAs(UnmanagedType.U1, SizeConst = 8)]
public byte[] manager_id;//运营商id
[MarshalAs(UnmanagedType.U1, SizeConst = 64)]
public byte[] manager_name;//运营商名称
[MarshalAs(UnmanagedType.U1, SizeConst = 8)]
public byte[] agent_id;//代理商id
[MarshalAs(UnmanagedType.U1, SizeConst = 64)]
public byte[] agent_name;//代理商名称
[MarshalAs(UnmanagedType.U1, SizeConst = 8)]
public byte[] hotel_group_id;
[MarshalAs(UnmanagedType.U1, SizeConst = 8)]
public byte[] hotel_id;//宾馆id
[MarshalAs(UnmanagedType.U1, SizeConst = 64)]
public byte[] hotel_name;//宾馆名称
[MarshalAs(UnmanagedType.U1, SizeConst = 8)]
public byte[] provider_id;//广告商id
[MarshalAs(UnmanagedType.U1, SizeConst = 64)]
public byte[] provider_name;//广告商名称
[MarshalAs(UnmanagedType.U1, SizeConst = 8)]
public byte[] guset_id;//顾客id
[MarshalAs(UnmanagedType.U1, SizeConst = 20)]
public byte[] guest_name;//顾客名称
[MarshalAs(UnmanagedType.I2)]
public ushort flag;//标识
[MarshalAs(UnmanagedType.I2)]
public ushort main_type;//主类型
[MarshalAs(UnmanagedType.U1, SizeConst = 20)]
public byte[] main_type_name;//主类型名称
[MarshalAs(UnmanagedType.I2)]
public ushort sub_type;//子类型
[MarshalAs(UnmanagedType.U1, SizeConst = 20)]
public byte[] sub_type_name;//子类型名称
[MarshalAs(UnmanagedType.U1,SizeConst=14)]
public byte[] use_time;//消费使用时间
[MarshalAs(UnmanagedType.U1, SizeConst = 4)]
public byte[] room_id;//房间id
[MarshalAs(UnmanagedType.U1,SizeConst=10)]
public byte[] room_no;//房间编号
[MarshalAs(UnmanagedType.I2)]
public ushort fee;//消费金额
[MarshalAs(UnmanagedType.U1, SizeConst = 8)]
public byte[] info_id;
[MarshalAs(UnmanagedType.U1, SizeConst = 64)]
public byte[] chs_name;//名称
}
上面就是我定义的结构体,当然在读取数据的时候也是知道数据是按照扫描顺序存贮在二进制文件中的,下边是我读取二进制文件入结构体中的代码
FileStream fs = new FileStream(dt

Fileinfo.Rows[i]["filePath"].ToString(), FileMode.Open);
BinaryReader br = new BinaryReader(fs, Encoding.GetEncoding("gb2312"));
string File_Head = Encoding.Default.GetString(br.ReadBytes(10));
if (File_Head.Length > 0)
{
for (int j = 0; j < (fs.Length - 10) / 74; j++)//74是结构体的总字节数大小
{
use_https://www.360docs.net/doc/ee8002550.html,ebill_id = br.ReadBytes(8);
use_billTemp.manager_id = br.ReadBytes(8);
use_billTemp.manager_name = br.ReadBytes(64);
use_billTemp.agent_id = br.ReadBytes(8);
use_billTemp.manager_name = br.ReadBytes(64);
use_billTemp.hotel_id = br.ReadBytes(8);
use_billTemp.hotel_name = br.ReadBytes(64);
use_billTemp.provider_id = br.ReadBytes(8);
use_billTemp.provider_name = br.ReadBytes(64);
use_billTemp.guset_id = br.ReadBytes(8);
use_billTemp.guset_name = br.ReadBytes(20);
use_billTemp.flag = br.ReadUInt16();
use_billTemp.main_type = br.ReadUInt16();
use_billTemp.sub_type = br.ReadUInt16();
use_https://www.360docs.net/doc/ee8002550.html,e_time = br.ReadBytes(14);
use_billTemp.room_id = br.ReadBytes(4);
use_billTemp.fee = br.ReadUInt16();
use_https://www.360docs.net/doc/ee8002550.html,_id = br.ReadBytes(8);
use_billTemp.chs_name = br.ReadBytes(64);
use_billTemp.hotel_group_id = br.ReadBytes(8);
}
二进制文件就是按照上面的顺序存储的,所以我知道每个字段该读多少,一行共读多少字段,然后才循环下一行继续重复读入数据
一行一行的存入数据库

相关文档
最新文档