写入数据库文件
private void Inti() { string dllpath = Environment.CurrentDirectory + "\\DLLFile\\"; try { if (string.IsNullOrEmpty(txtOrderNo.Text)) { MessageBox.Show("请输入订单号"); txtOrderNo.Focus(); return; } if (string.IsNullOrEmpty(cmbPort.Text)) { MessageBox.Show("请选择端口"); cmbPort.Focus(); return; } string sql = "SELECT * FROM Tb_WMS_File WHERE TC_FileName=@OrderNo"; SqlParameter[] pms = new SqlParameter[] { new SqlParameter("@OrderNo",SqlDbType.VarChar,2000), }; pms[0].Value = txtOrderNo.Text; DataTable dt = SqlHelper.ExecuteDataTable(sql, CommandType.Text, pms) ?? new DataTable(); if (dt.Rows.Count > 0) { string errMsg = string.Empty; byte[] dllData = (byte[])dt.Rows[0]["TC_FileContent"]; string dllName = dt.Rows[0]["TC_FileType"].ToString().Trim();// + ".dll" bool res = CommonHelper.SaveDll(dllData,dllName, dllpath, out errMsg); if (res == false) { MessageBox.Show("下载Dll文件失败," + errMsg); } GetAssembly(dllpath + dllName); } else { MessageBox.Show("根据订单号没有获取到信息;订单号:" + txtOrderNo.Text); } } catch (Exception ex) { MessageBox.Show("初始化失败," + ex.Message + "位置:" + ex.StackTrace); } }
文件转成字节流保存
/// <summary>
/// 将指定路径下的文件转换成二进制流,用于保存到数据库
/// </summary>
/// <param name="filepath">文件路径(路径+文件全名及后缀)</param>
/// <returns>字节流</returns>
public static Byte[] GetBytesByPath(string filepath)
{
using (FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read))
{
Byte[] byData = new Byte[fs.Length];//新建用于保存文件流的字节数组
fs.Read(byData, 0, byData.Length);//读取文件流
fs.Close();
return byData;
}
}
保存文件
/// <summary> /// 保存文件dll /// </summary> /// <param name="dllData">文件字节流</param> /// <param name="dllName">文件名称</param> /// <param name="dllpath">文件路径</param> /// <param name="errMsg">异常信息</param> /// <returns>true成功,false失败</returns> public static bool SaveDll(byte[] dllData, string dllName, string dllpath, out string errMsg) { errMsg = string.Empty; try { if (!Directory.Exists(dllpath)) { Directory.CreateDirectory(dllpath); } if (File.Exists(dllpath + dllName)) { File.Delete(dllpath + dllName); } string filePath = Path.Combine(dllpath, dllName); using (FileStream fs = new FileStream(filePath, FileMode.Create)) { fs.Write(dllData, 0, dllData.Length); fs.Close(); } return true; } catch (Exception ex) { errMsg = ex.Message + ex.StackTrace; return false; } }