C#文件保存数据库,数据库读取字节流生生成文件

发布时间 2023-09-14 14:55:37作者: 博客YS

写入数据库文件

   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;
            }
        }