构建XML文件,压缩内存并保存二进制文件至数据库(使用ODBC方式)
using Ionic.Zip;using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.IO.Compression;
using System.Text;
using System.Xml;
namespace ConTestODBC
{
public class test1
{
OdbcHelper odbcHelper = new OdbcHelper();
public static void test2()
{
DataTable dtTag = new DataTable();
dtTag.Columns.Add("time");
dtTag.Columns.Add("amp");
dtTag.Rows.Add("2019/11/12 18:03:09", "TI-0910104/AI1/PV.CV");
dtTag.Rows.Add("2019/11/12 18:03:09", "TI-0910704/AI1/PV.CV");
dtTag.Rows.Add("2019/11/12 18:03:09", "TI-1200102/AI1/PV.CV");
dtTag.Rows.Add("2019/11/12 18:03:09", "TI-1224005/AI1/PV.CV");
dtTag.Rows.Add("2019/11/12 18:03:09", "TI-1820101/AI1/PV.CV");
//创建XmlDocument对象
XmlDocument xmlDoc = new XmlDocument();
//XML的声明<?xml version="1.0" encoding="gb2312"?>
XmlDeclaration xmlSM = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
//追加xmldecl位置
xmlDoc.AppendChild(xmlSM);
//添加一个名为TraceData的根节点
XmlElement xml = xmlDoc.CreateElement("", "TraceData", "");
//追加TraceData的根节点位置
xmlDoc.AppendChild(xml);
//添加另一个节点,与TraceData所匹配,查找<TraceData>
XmlNode traceData = xmlDoc.SelectSingleNode("TraceData");
//添加一个名为<Header>的节点
XmlElement Header = xmlDoc.CreateElement("Header");
//为<Header>节点的属性
//Header.SetAttribute("name", "博客园");
//Header.SetAttribute("age", "26");
XmlElement x1 = xmlDoc.CreateElement("ColumnHeader");
//InnerText:获取或设置节点及其所有子节点的串连值
x1.InnerText =dtTag.Columns[0].ToString()+","+ dtTag.Columns[1].ToString();//"time,amp"
Header.AppendChild(x1);//添加到<Header>节点中
traceData.AppendChild(Header);//添加到<TraceData>节点中
XmlElement Data = xmlDoc.CreateElement("Data");
for (int i = 0; i < dtTag.Rows.Count; i++)
{
Data.InnerText += Environment.NewLine+" ";
for (int j = 0; j < dtTag.Columns.Count; j++)
{
Data.InnerText += dtTag.Rows[i][j].ToString();//Environment.NewLine
}
}
Data.InnerText += Environment.NewLine;
//为<Data>节点的属性
//Data.SetAttribute("name", "博客园");
//Data.SetAttribute("age", "26");
//XmlElement x2 = xmlDoc.CreateElement("ColumnHeader");
////InnerText:获取或设置节点及其所有子节点的串连值
//x1.InnerText = "time,amp";
//Header.AppendChild(x1);//添加到<Header>节点中
traceData.AppendChild(Data);//添加到<TraceData>节点中
//保存好创建的XML文档
string sFilePath = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");// Application.StartupPath + "\UserFile\Label\" + DateTime.Now.ToString();
xmlDoc.Save("D:/OpcXML/data.xml");
Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
}
//
public static void SaveopcXML()
{
//DirectoryInfo dir = new DirectoryInfo("D:/OpcXML");//GlobalVariable.g_LogInfo.sLogDir
//FileInfo[] files = dir.GetFiles();
//List<FileInfo> files1 = new List<FileInfo>();
//for (int i = 0; i < files.Length; i++)
//{
// files1.Add(files[i]);
//}
FileStream fs = new FileStream("D:/OpcXML/Data.xml", FileMode.Open);
BinaryReader br = new BinaryReader(fs);
Byte[] byData = br.ReadBytes((int)fs.Length);
int fLength = (int)fs.Length;
Byte[] zipData = Compress(byData).ToArray();
OdbcHelper.OracleExeQuery("update U_WIPPROCDATA set FILE_DATA=RAWTOHEX("" + zipData + ""), CREATE_TIME=sysdate,CREATE_USER_ID="11" where FACTORY ="15车间" AND LOT_ID ="1"");
//RAWTOHEX()将byte数组转换为16进制,避免报错无效的16进制数字
fs.Close();
Console.WriteLine(fLength);
}
public static MemoryStream Compress(byte[] inBytes)
{
MemoryStream outStream = new MemoryStream();
using (MemoryStream intStream = new MemoryStream(inBytes))
{
using (GZipStream Compress = new GZipStream(outStream, CompressionMode.Compress))
{
intStream.CopyTo(Compress);
}
}
return outStream;
}
}
}
==========
using ICSharpCode.SharpZipLib.GZip;using Ionic.Zip;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.IO.Compression;
using System.Text;
using System.Xml;
namespace ConTestODBC
{
public class test1
{
OdbcHelper odbcHelper = new OdbcHelper();
public static void test2()
{
DataTable dtTag = new DataTable();
dtTag.Columns.Add("time");
dtTag.Columns.Add("amp");
dtTag.Rows.Add("2019/11/12 18:03:09", 0910104);
dtTag.Rows.Add("2019/11/12 18:03:09", 0910704);
dtTag.Rows.Add("2019/11/12 18:03:09", 1200102);
dtTag.Rows.Add("2019/11/12 18:03:09", 1224005);
dtTag.Rows.Add("2019/11/12 18:03:09", 1820101);
//创建XmlDocument对象
XmlDocument xmlDoc = new XmlDocument();
//XML的声明<?xml version="1.0" encoding="gb2312"?>
XmlDeclaration xmlSM = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
//追加xmldecl位置
xmlDoc.AppendChild(xmlSM);
//添加一个名为TraceData的根节点
XmlElement xml = xmlDoc.CreateElement("", "TraceData", "");
//追加TraceData的根节点位置
xmlDoc.AppendChild(xml);
//添加另一个节点,与TraceData所匹配,查找<TraceData>
XmlNode traceData = xmlDoc.SelectSingleNode("TraceData");
//添加一个名为<Header>的节点
XmlElement Header = xmlDoc.CreateElement("Header");
//为<Header>节点的属性
//Header.SetAttribute("name", "博客园");
//Header.SetAttribute("age", "26");
XmlElement x1 = xmlDoc.CreateElement("ColumnHeader");
//InnerText:获取或设置节点及其所有子节点的串连值
x1.InnerText =dtTag.Columns[0].ToString()+","+ dtTag.Columns[1].ToString();//"time,amp"
Header.AppendChild(x1);//添加到<Header>节点中
traceData.AppendChild(Header);//添加到<TraceData>节点中
XmlElement Data = xmlDoc.CreateElement("Data");
for (int i = 0; i < dtTag.Rows.Count; i++)
{
Data.InnerText += Environment.NewLine+" ";
for (int j = 0; j < dtTag.Columns.Count; j++)
{
Data.InnerText += dtTag.Rows[i][j].ToString();//Environment.NewLine
while (j%2==0)
{
Data.InnerText += ",";
}
}
}
Data.InnerText += Environment.NewLine;
//为<Data>节点的属性
//Data.SetAttribute("name", "博客园");
//Data.SetAttribute("age", "26");
//XmlElement x2 = xmlDoc.CreateElement("ColumnHeader");
////InnerText:获取或设置节点及其所有子节点的串连值
//x1.InnerText = "time,amp";
//Header.AppendChild(x1);//添加到<Header>节点中
traceData.AppendChild(Data);//添加到<TraceData>节点中
//保存好创建的XML文档
string sFilePath = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");// Application.StartupPath + "\UserFile\Label\" + DateTime.Now.ToString();
xmlDoc.Save("D:/OpcXML/data.xml");
Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
}
//
public static void SaveopcXML()
{
//DirectoryInfo dir = new DirectoryInfo("D:/OpcXML");//GlobalVariable.g_LogInfo.sLogDir
//FileInfo[] files = dir.GetFiles();
//List<FileInfo> files1 = new List<FileInfo>();
//for (int i = 0; i < files.Length; i++)
//{
// files1.Add(files[i]);
//}
FileStream fs = new FileStream("D:/OpcXML/Data.xml", FileMode.Open);
BinaryReader br = new BinaryReader(fs);
Byte[] byData = br.ReadBytes((int)fs.Length);
int fLength = (int)fs.Length;
Byte[] zipData = CompressGZip(byData);// Compress(byData).ToArray()
string sData = System.Text.Encoding.Default.GetString(byData);//Encoding.ASCII.GetBytes(zipData)
OdbcHelper.OracleExeQuery("update U_WIPPROCDATA set FILE_DATA=rawtohex("" + sData + ""), CREATE_TIME=sysdate,CREATE_USER_ID="11" where FACTORY ="15车间" AND LOT_ID ="1"");
fs.Close();
Console.WriteLine(fLength);
}
static string HexString2BinString(string hexString)
{
string result = string.Empty;
foreach (char c in hexString)
{
int v = Convert.ToInt32(c.ToString(), 16);
int v2 = int.Parse(Convert.ToString(v, 2));
// 去掉格式串中的空格,即可去掉每个4位二进制数之间的空格,
result += string.Format("{0:d4} ", v2);
}
return result;
}
public static byte[] CompressGZip(byte[] rawData)
{
MemoryStream ms = new MemoryStream();
GZipOutputStream compressedzipStream = new GZipOutputStream(ms);
compressedzipStream.Write(rawData, 0, rawData.Length);
compressedzipStream.Close();
return ms.ToArray();
}
public static byte[] UnGZip(byte[] byteArray)
{
ZipInputStream gzi = new ZipInputStream(new MemoryStream(byteArray));
MemoryStream re = new MemoryStream(50000);
int count;
byte[] data = new byte[50000];
while ((count = gzi.Read(data, 0, data.Length)) != 0)
{
re.Write(data, 0, count);
}
byte[] overarr = re.ToArray();
return overarr;
}
public static MemoryStream Compress(byte[] inBytes)
{
MemoryStream outStream = new MemoryStream();
using (MemoryStream intStream = new MemoryStream(inBytes))
{
using (GZipStream Compress = new GZipStream(outStream, CompressionMode.Compress))
{
intStream.CopyTo(Compress);
}
}
return outStream;
}
}
}
以上是 构建XML文件,压缩内存并保存二进制文件至数据库(使用ODBC方式) 的全部内容, 来源链接: utcz.com/z/510703.html