关于Binary方式
Binary和文本方式的区别,主要是在一些特殊字符的处理。
由于在不同的系统中,文本中用于显示格式的控制符编码是不同的。比如windows 的文本回车是0x13 0x10两个字符,而unix是0x10。如果是以文本方式打开,就会做一些转换。这样就不能保证从文件中读取到的内容和原来的完全一致,但能保证输出文本是显示的正确。而以Binary方式打开,内容完全一致,但在不同系统上输出可能不一样。
如果你读取的内容需要由系统显示,***用文本方式(由于很多C/C++编译器的输出函数能适用多种格式,所以用Binary方式通常也不会有问题)。如果要保证读取的和文件一致,就一定要用Binary方式。
C#编程实例-读写Binary,对于初学者来说是个不错的参考性文章。
- public MemoryStream getBlob(string SQL)
- ...{
- try
- ...{
- Db_Conn();
- cmd = new OleDbCommand(SQL, Conn);
- cmd.CommandType = CommandType.Text;//是sql
- OleDbDataReader Rs = cmd.ExecuteReader();
- if (Rs.Read()) //循环到下一条记录
- ...{
- if (!(Rs.GetValue(0) is System.DBNull))
- ...{
- byte[] image_bytes = (byte[])Rs.GetValue(0);
- MemoryStream ms = new MemoryStream(image_bytes);
- return ms;
- }
- else
- return null;
- }
- else
- return null;
- }
- finally
- ...{
- this.close();
- }
- }
- //设置blob
- public bool SetBlob(string SQL, MemoryStream Ms)
- ...{
- try
- ...{
- Db_Conn();
- cmd = new OleDbCommand(SQL, Conn);
- cmd.CommandType = CommandType.Text;//是sql
- int n=Convert.ToInt32(Ms.Length.ToString());
- Ms.Position = 0;
- byte[] pReadByte = new Byte[n];
- Ms.Read(pReadByte, 0, n);
- cmd.Parameters.Add("BLOB", OleDbType.Binary).Value = pReadByte;
- cmd.ExecuteNonQuery();
- return true;
- }
- catch (Exception ex)
- ...{
- MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
- return false;
- }
- finally
- ...{
- this.close();
- }
- }
C#编程实例-读写Binary 调用getBlob代码
- String sqlStr = "select content from dp where id=" + ID;
- //content为dp中的BLOB字段,ID为主键
- MemoryStream ms = DBClass.getBlob(sqlStr);
- if (ms == null)
- richTextBox.Clear();
- else
- ...{
- if (ms.Length > 0)
- ...{
- ms.Position = 0;
- try
- ...{
- richTextBox.LoadFile(ms, RichTextBoxStreamType.RichText);
- }catch...{
- richTextBox.LoadFile(ms, RichTextBoxStreamType.PlainText);
- }
- }else
- richTextBox.Clear();
- }
C#编程实例-读写Binary 调用setBlob代码
- String sqlStr = "update dp set content=:BLOB where id=" + ID;
- MemoryStream ms = new MemoryStream();
- richTextBox.SaveFile(ms, RichTextBoxStreamType.RichText);
- if (!DBClass.SetBlob(sqlStr, ms))
- ...{
- MessageBox.Show("保存失败");
- }
【编辑推荐】