C# 自动批量导入图片到数据库中
操作 SQLite 数据库进行图片存储
// 引用dll
// System.Data.dll
// System.Data.SQLite.dll using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.SQLite;
using System.IO;
using System.Windows; namespace WpfAppSychronize
{
public partial class MainWindow : Window
{
string fileDirectory = AppDomain.CurrentDomain.BaseDirectory + "GuestImages\\";
public MainWindow()
{
InitializeComponent(); if (!Directory.Exists(fileDirectory))
{
Directory.CreateDirectory(fileDirectory);
}
} private void Button_Click(object sender, RoutedEventArgs e)
{
QueryImagesFromFile();
} /// <summary>
/// 读取图片文件列表
/// </summary>
/// <returns></returns>
public List<Guest> QueryImagesFromFile()
{
string diretory = fileDirectory;
string[] filePaths = Directory.GetFiles(diretory);
List<Guest> guests = new List<Guest>(); foreach (var path in filePaths)
{
int fileLength = ;
byte[] image = null;
using (FileStream fs = File.OpenRead(path))
{
fileLength = (int)fs.Length;
image = new byte[fileLength];
fs.Read(image, , fileLength);
} Guest guest = new Guest();
string fileName = path.Substring(path.LastIndexOf("\\") + );
fileName = fileName.Substring(, fileName.LastIndexOf("."));
long id = ;
long.TryParse(fileName, out id);
guest.GuestId = id;
guest.GuestImage = image;
guests.Add(guest);
}
return guests;
} /// <summary>
/// 从SQL Server数据库中读取图片字段信息
/// </summary>
/// <returns></returns>
public List<Guest> QueryImagesFromSQLDB()
{
string sql = @"SELECT [GuestID],[GuestImage] FROM [GuestInfo]";
List<Guest> guests = new List<Guest>(); using (SqlDataReader dr = DbHelperSQL.ExecuteReader(sql))
{
while (dr.Read())
{
Guest guest = new Guest();
guest.GuestId = Convert.ToInt64(dr["GuestID"]);
guest.GuestImage = dr["GuestImage"] != DBNull.Value ? (byte[])dr["GuestImage"] : null;
guests.Add(guest);
}
}
return guests;
} /// <summary>
/// 从SQLite数据库中读取图片字段信息
/// </summary>
/// <returns></returns>
public List<Guest> QueryImagesFromSQLiteDB()
{
DbHelperSQLite.connectionString = "Data Source=MyDatabase.sqlite;Version=3;"; string sql = @"SELECT [GuestID],[GuestImage] FROM [GuestInfo]";
List<Guest> guests = new List<Guest>(); using (SQLiteDataReader dr = DbHelperSQLite.ExecuteReader(sql))
{
while (dr.Read())
{
Guest guest = new Guest();
guest.GuestId = Convert.ToInt64(dr["GuestID"]);
guest.GuestImage = dr["GuestImage"] != DBNull.Value ? (byte[])dr["GuestImage"] : null;
guests.Add(guest);
}
}
return guests;
} /// <summary>
/// 把图片字节流保存为文件
/// </summary>
/// <param name="guests"></param>
public void SaveImagesToFile(List<Guest> guests)
{
foreach (var Guest in guests)
{
byte[] MyData = Guest.GuestImage;
string imagePath = fileDirectory + Guest.GuestId.ToString() + @".jpg"; using (FileStream fs = new FileStream(imagePath, FileMode.OpenOrCreate, FileAccess.Write))
{
fs.Write(MyData, , MyData.Length);
fs.Close();
}
}
} /// <summary>
/// 把图片字节流保存到SQL Server数据库
/// </summary>
/// <param name="guests"></param>
public void SaveImagesToSQLDB(List<Guest> guests)
{
foreach (var Guest in guests)
{
string sql = @"INSERT INTO [GuestInfo] ([GuestID],[GuestImage]) VALUES(@GuestID, @GuestImage)"; SqlParameter[] param = new SqlParameter[];
param[] = new SqlParameter("@GuestID", SqlDbType.BigInt);
param[].Value = Guest.GuestId;
param[] = new SqlParameter("@GuestImage", SqlDbType.Image);
param[].Value = Guest.GuestImage != null ? Guest.GuestImage : new byte[] { }; DbHelperSQL.ExecuteSql(sql, param);
}
} /// <summary>
/// 把图片字节流保存到SQLite数据库
/// </summary>
/// <param name="guests"></param>
public void SaveImagesToSQLiteDB(List<Guest> guests)
{
DbHelperSQLite.connectionString = "Data Source=MyDatabase.sqlite;Version=3;"; foreach (var Guest in guests)
{
string sql = @"INSERT INTO [GuestInfo]([GuestID],[GuestImage]) VALUES(@GuestID, @GuestImage)"; SQLiteParameter[] param = new SQLiteParameter[]; // 注意:这里赋值必须要用DbType.xxx,否则赋值不上
param[] = new SQLiteParameter("@GuestID", DbType.Int64);
param[].Value = Guest.GuestId;
param[] = new SQLiteParameter("@GuestImage", DbType.Binary);
param[].Value = Guest.GuestImage != null ? Guest.GuestImage : new byte[] { }; DbHelperSQLite.ExecuteSql(sql, param);
}
}
} public class Guest
{
public long GuestId { get; set; }
public byte[] GuestImage { get; set; }
} public abstract class DbHelperSQL
{
//数据库连接字符串
public static string connectionString = ""; /// <summary>
/// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
/// </summary>
/// <param name="strSQL">查询语句</param>
/// <returns>SqlDataReader</returns>
public static SqlDataReader ExecuteReader(string strSQL)
{
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(strSQL, connection);
try
{
connection.Open();
SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return myReader;
}
catch (System.Data.SqlClient.SqlException e)
{
throw e;
}
} /// <summary>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <returns>影响的记录数</returns>
public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
int rows = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return rows;
}
catch (System.Data.SqlClient.SqlException e)
{
throw e;
}
}
}
} private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = CommandType.Text;//cmdType;
if (cmdParms != null)
{ foreach (SqlParameter parameter in cmdParms)
{
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
cmd.Parameters.Add(parameter);
}
}
}
} public class DbHelperSQLite
{
//数据库连接字符串
public static string connectionString = ""; /// <summary>
/// 执行查询语句,返回SQLiteDataReader
/// </summary>
/// <param name="strSQL">查询语句</param>
/// <returns>SQLiteDataReader</returns>
public static SQLiteDataReader ExecuteReader(string strSQL)
{
SQLiteConnection connection = new SQLiteConnection(connectionString);
SQLiteCommand cmd = new SQLiteCommand(strSQL, connection);
try
{
connection.Open();
SQLiteDataReader myReader = cmd.ExecuteReader();
return myReader;
}
catch (System.Data.SQLite.SQLiteException e)
{
throw new Exception(e.Message);
}
} /// <summary>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <returns>影响的记录数</returns>
public static int ExecuteSql(string SQLString, params SQLiteParameter[] cmdParms)
{
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
using (SQLiteCommand cmd = new SQLiteCommand())
{
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
int rows = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return rows;
}
catch (System.Data.SQLite.SQLiteException E)
{
throw new Exception(E.Message);
}
}
}
} private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, SQLiteTransaction trans, string cmdText, SQLiteParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = CommandType.Text;//cmdType;
if (cmdParms != null)
{
foreach (SQLiteParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
}
}
批量保存图片到数据库:
using Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Windows.Forms; namespace DataImport
{
public partial class Form1 : Form
{
public List<string> _photoFilePathList = new List<string>();
string _connStr = "Data Source=192.168.10.109;Initial Catalog=HT_ACCESS;User ID=sa;Password=123456"; public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
GetFiles(textBox1.Text); int i = ;
foreach (var file in _photoFilePathList)
{
string err = "";
try
{
FileStream fs = new FileStream(file, System.IO.FileMode.Open, FileAccess.Read);
BinaryReader binaryReader = new BinaryReader(fs); byte[] imgData = binaryReader.ReadBytes((int)fs.Length); VIEW_M_PHOTO photo = new VIEW_M_PHOTO();
photo.EMPLOYEENO = "" + i.ToString();
photo.PHOTO = imgData;
photo.FILEEXT = "" + i.ToString(); //保存照片
AddPhoto(photo); i++;
}
catch (Exception ex)
{
err = ex.Message.ToString();
continue;
}
}
} public bool AddPhoto(VIEW_M_PHOTO model)
{
using (SqlConnection connection = new SqlConnection(_connStr))
{
SqlCommand command = new SqlCommand(@"INSERT INTO [HT_ACCESS].[dbo].[HT_PHOTO] (EMP_NO,PHOTO_CONTENT,RECORD_COUNTER)
Values(@EMP_NO, @PHOTO_CONTENT, @RECORD_COUNTER)", connection); command.Parameters.Add("@EMP_NO",
SqlDbType.NVarChar, ).Value = model.EMPLOYEENO;
command.Parameters.Add("@PHOTO_CONTENT",
SqlDbType.Image, model.PHOTO.Length).Value = model.PHOTO;
command.Parameters.Add("@RECORD_COUNTER",
SqlDbType.NVarChar, ).Value = model.FILEEXT; connection.Open();
int rows = command.ExecuteNonQuery(); if (rows > )
{
return true;
}
else
{
return false;
}
}
}
private void btnOpenDirectory_Click(object sender, EventArgs e)
{
FolderBrowserDialog dialog = new FolderBrowserDialog();
dialog.Description = "请选择文件路径";
if (dialog.ShowDialog() == DialogResult.OK)
{
string foldPath = dialog.SelectedPath;
textBox1.Text = foldPath;
}
} public void GetFiles(string str)
{
DirectoryInfo parentFolder = new DirectoryInfo(str); //删除子文件夹
DirectoryInfo[] childFolders = parentFolder.GetDirectories();
foreach (DirectoryInfo dir in childFolders)
{
try
{
string dirName = dir.Name;
//if (dirName.Contains("obj") || dirName.Contains("bin"))
//{
// Directory.Delete(dir.FullName, true);
//}
}
catch (Exception ex)
{
throw ex;
}
} //删除当前文件夹内文件
FileInfo[] files = parentFolder.GetFiles();
foreach (FileInfo file in files)
{
//string fileName = file.FullName.Substring((file.FullName.LastIndexOf("\\") + 1), file.FullName.Length - file.FullName.LastIndexOf("\\") - 1);
string fileName = file.Name;
try
{
//if (fileName.Contains("cs"))
//{
// //File.Delete(file.FullName);
// string path = file.FullName;
// //Path.ChangeExtension(path, "txt");
// File.Move(path, Path.ChangeExtension(path, "txt"));
//} _photoFilePathList.Add(file.FullName);
}
catch (Exception ex)
{
throw ex;
}
} //递归搜索子文件夹内文件
foreach (DirectoryInfo childFolder in parentFolder.GetDirectories())
{
GetFiles(childFolder.FullName);
}
}
}
}
C# 自动批量导入图片到数据库中的更多相关文章
- [转]iOS:批量导入图片和视频到模拟器的相册
IOS开发中我们经常会用到模拟器调试,模拟器有个主要的好处就是程序启动块,最重要的是如果没有证书的话,我们就只能在模拟器上调试了.使用模拟器调试时我们可能碰到需要从系统相册选择图片的情况,特别是做图片 ...
- mysql中把一个表的数据批量导入另一个表中
mysql中把一个表的数据批量导入另一个表中 不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指定 ...
- 如何将dmp文件导入到oracle数据库中
如何将dmp文件导入到oracle数据库中 1.首先,我们可以先建立自己的一个用户表空间,创建表空间的格式如下: CREATE TABLESPACE certification(表空间的名字) DAT ...
- 怎样把excel的数据导入到sqlserver2000数据库中
在做程序的时候有时需要把excel数据导入到sqlserver2000中,以前没从外部导入过数据,今天刚做了一下导入数据,感觉还是蛮简单的,没做过之前还想着多么的复杂呢,下面就来分享一下我是如何把ex ...
- 用ttBulkCp把excel中的数据导入到timesten数据库中
最近要做数据预处理,需要用到数据库.而且是以前从来没听说过的TimesTen. 首要目标是要把Excel里的数据,导入到TimesTen数据库中.而TimesTen在win10里用不了,于是我就在虚拟 ...
- 如何简单地利用Bitmap为中介储存图片到数据库中
这是我的第一篇博文,请大家多多指教! 大概一个月之前,在跟朋友合作开发一个APP的过程中,我们发现到一个问题:图片的存储.因为数据库没有图片这种数据类型,当用户上传的图片需要存储的时候 ...
- 023医疗项目-模块二:药品目录的导入导出-从数据库中查出数据用XSSF导出excel并存放在虚拟目录最后下载(包括调试)
我们要实现的效果: 进入到这个页面后,输入要查询的条件,查询出药品表的数据,然后按下导出按钮 ,就会在服务器的一个目录下生成一个药品表的excel表格. 点击"导出"之后 ...
- EXCEL批量导入到Sqlserver数据库并进行两表间数据的批量修改
Excel 大量数据导入到sqlserver生成临时表并将临时表某字段的数据批量更新的原表中的某个字段 1:首先要对EXCEL进行处理 列名改成英文,不要有多余的列和行(通过ctrl+shift 左或 ...
- C#中实现excel文件批量导入access数据表中
一 .界面简单设计如下: 二 .代码如下: using System; using System.Collections.Generic; using System.ComponentModel; u ...
随机推荐
- Java高概率面试题目—finally
在Java面试中关于finally的面试题目出现的概率非常高,而且一旦面试官问起绝不会是蜻蜓点水,而是会向你发起层层递进地“连环问”,并且回答这系列问题常常需要代码的辅助,可谓考验基础的面试利题.究竟 ...
- CODEFORCES problem 105A.Transmigration
题目本身上手并不难,字符串处理+简单的排序.要注意的地方是浮点数的处理. 依据计算机中浮点数的表示原理,在实际编程的过程中即使用一个确定的整数(假设是1)给一个浮点变量赋值 在查看变量时会发现实际存储 ...
- 2017-10-03-afternoon
P100 zhx 竞赛时间:????年??月??日??:??-??:?? 题目名称 a b c 名称 a b c 输入 a.in b.in c.in 输出 a.out b.out c.out 每个测试 ...
- JVM(二):Java中的语法糖
JVM(二):Java中的语法糖 上文讲到在语义分析中会对Java中的语法糖进行解糖操作,因此本文就主要讲述一下Java中有哪些语法糖,每个语法糖在解糖过后的原始代码,以及这些语法糖背后的逻辑. 语法 ...
- operamasks-omGrid的使用
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="personTab.aspx ...
- easyui datagrid-detailview 嵌套高度自适应
实现效果 原因 异步加载,明细展开时,可能会遇到父列表不能自动适应子列表高度的变化 具体代码 $('#centerdatagrid').datagrid({ url:'${ctx}/offer/off ...
- iOS 设备推断 最新统计代码
- (NSString*) deviceName { struct utsname systemInfo; uname(&systemInfo); ...
- clamav完整查杀linux病毒实战(摘抄)
http://dadloveu.blog.51cto.com/blog/715500/1882521 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,L ...
- [Debug] Inspect and Style an Element in DevTools that Normally Disappears when Inactive
It’s handy to inspect an element in your browser’s DevTools when you need to experiment or tweak it’ ...
- HDU 5371 Manacher
点击打开链接 题意:给定一串数字.求最长的一段连续的数字,将它平均分为三段.满足第一段和第二段是回文的.第一段和第三段相等 思路:第一段和第二段是回文的.那么第二段和第三段也是回文的,将数列进行Man ...