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 ...
随机推荐
- [转] 结构体file_operations
原文地址: http://www.cnblogs.com/sunyubo/archive/2010/12/22/2282079.html 结构体file_operations在头文件 linux/fs ...
- POJ 2101 Intervals 差分约束
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27746 Accepted: 10687 Description You ...
- [bzoj4698][Sdoi2008]Sandy的卡片_后缀数组_二分/单调队列_双指针
Sandy的卡片 bzoj-4698 Sdoi-2008 题目大意:题目链接. 注释:略. 想法: 这个题跟一个Usaco的题特别像.我们把这些串差分 现在我们要求的就是公共子串且出现次数不少于$k$ ...
- JDBC示例(增删查改)
前提: 1.项目中引入MySQL的JAR包,POM参考如下配置: <!-- mysql-connector-java --> <!-- http://mvnrepository.co ...
- JDBC的事务
以下内容引用自http://wiki.jikexueyuan.com/project/jdbc/transactions.html: 如果JDBC连接是处于自动提交模式下,该模式为默认模式,那么每句S ...
- CentOS 7最小安装后,手动连接网络
时间:2015-12-12 00:53来源:blog.51cto.com 作者:XD 举报 点击:3679次 CentOS中最小安装,由于默认的网卡没有激活,所以无法连接到网络. 设置如下: sucd ...
- Android插屏动画效果
公司研发SDK,须要类似有米插屏的动画效果,研究了下,写了一个DEMO,凝视非常具体了. <span style="font-size:24px;">package c ...
- 用C# (.NET Core) 实现抽象工厂设计模式
用C# (.NET Core) 实现抽象工厂设计模式 本文的概念性内容来自深入浅出设计模式一书. 上一篇文章讲了简单工厂和工厂方法设计模式 http://www.cnblogs.com/cgzl/ ...
- 内容可编辑且随内容自增长的div
<!DOCTYPE HTML> <html> <head> <title></title> <meta http-equiv=&quo ...
- windows7 配置 python开发环境
1.安装python2.7 官网下载,安装,配置环境变量 path,命令行 执行python 2.easy_install 安装 win7 64位必须使用ez_setup.py进行安装. 方法 ...