第一步首先:检测orcale数据库是否能够链接成功。
第二步接着:如果可以链接成功,再检查你要插入图片的表是否存在。
第三步接着:如果存在表,让用户选择必要的字段,之后开始批量导入图片。
<pre name="code" class="html"> /// <summary>
/// 初始化事件
/// </summary>
public Form1()
{
InitializeComponent();
txt_username.Text = ConfigUtil.ReadWebConfigFromSetup("USERNAME", "App.config"); <span style="color:#ff0000;">从配置文件中读取配置项</span>
txt_userpwd.Text = ConfigUtil.ReadWebConfigFromSetup("USERPWD", "App.config");
txt_dataSource.Text = ConfigUtil.ReadWebConfigFromSetup("DATASOURCE", "App.config");
}
<pre name="code" class="html"> /// <summary>
/// 读配置文件(AppSettings)
/// 作者:10216
/// 时间:2014-6-24 11:53:56
/// </summary>
/// <param name="key">键</param>
/// <param name="cfgPath">相对于程序启动目录下的文件路径</param>
/// <returns></returns>
public static string ReadWebConfigFromSetup(string key, string cfgPath)
{
try
{
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = SystemUtil.GetExeSetupPath() + cfgPath;
Configuration cfg = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
string value = cfg.AppSettings.Settings[key] == null ? "" : cfg.AppSettings.Settings[key].Value;
return value;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
检查方法:
private void bt_check_Click(object sender, EventArgs e)
{
if ((!string.IsNullOrEmpty(txt_username.Text)) && (!string.IsNullOrEmpty(txt_dataSource.Text)))
{
if (Commen.CheckConnection(txt_username.Text, txt_userpwd.Text, txt_dataSource.Text))<span style="color:#ff0000;">这个方法(1)</span>
{
ConfigUtil.WriteWebConfigToSetup("USERNAME", txt_username.Text, "App.config");<span style="color:#ff0000;">方法2</span>
ConfigUtil.WriteWebConfigToSetup("USERPWD", txt_userpwd.Text, "App.config");
ConfigUtil.WriteWebConfigToSetup("DATASOURCE", txt_dataSource.Text, "App.config");
MessageBox.Show("链接成功!", "提示!");
btn_in.Enabled = true;
}
else
{
MessageBox.Show("无法链接成功,请检测配置!", "提示!");
}
}
else
{
MessageBox.Show("用户名或数据源为空!", "提示!");
}
}
这个方法是检查数据库是否可以链接成功。
<pre name="code" class="html"> /// <summary><span style="color:#ff0000;">方法(1)</span>
/// 检测链接是否成功
/// </summary>
/// <param name="username"></param>
/// <param name="userpwd"></param>
/// <param name="datasource"></param>
/// <returns></returns>
public static bool CheckConnection(string username, string userpwd, string datasource)
{
string connectionString = string.Format("Persist Security Info=False;Data Source='{0}';User ID='{1}';Password='{2}'", datasource, username, userpwd);
using (OracleConnection conn = new OracleConnection(connectionString))
{
try
{
conn.Open();
conn.Close();
return true;
}
catch
{
return false;
}
}
}
/// <summary> 方法2
/// 写配置文件(AppSettings)
/// 作者:10216
/// 时间:2014-6-24 11:53:56
/// </summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="cfgPath">相对于程序启动目录下的文件路径</param>
public static void WriteWebConfigToSetup(string key, string value, string cfgPath)
{
try
{
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = SystemUtil.GetExeSetupPath() + cfgPath; 方法3
Configuration cfg = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
AppSettingsSection app = cfg.AppSettings;
if (cfg.AppSettings.Settings[key] == null)
{
app.Settings.Add(key, value);
cfg.Save(ConfigurationSaveMode.Modified);
}
else
{
app.Settings[key].Value = value;
cfg.Save(ConfigurationSaveMode.Modified);
}
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
<pre name="code" class="html"> /// <summary><span style="color: rgb(255, 0, 0); font-family: Arial, Helvetica, sans-serif;">方法3</span>
/// 获取应用程序启动根目录的物理路径
/// 作者:10216
/// 时间:2014-7-30 23:00:21
/// </summary>
/// <returns></returns>
public static string GetExeSetupPath()
{
return Application.StartupPath + "/";
}
检查表是否存在
<pre name="code" class="html"> /// <summary>
/// 检测表是否存在
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void bt_check_Click(object sender, EventArgs e)
{
groupBox1.Enabled = false;
groupBox2.Enabled = false;
bt_pic_path.Enabled = false;
DataTable dt= Commen.CheckTable(USERNAME, USERPWD, DATASOURCE, txt_table.Text);//<span style="color:#ff0000;">检查表</span>
if (dt != null)
{
foreach (DataColumn dc in dt.Columns)
{
cmb_pic.Items.Add(dc.ColumnName.ToString());
cmb_picname.Items.Add(dc.ColumnName.ToString());
cmb_zhujian.Items.Add(dc.ColumnName.ToString());
}
MessageBox.Show("检查已成功,请配置图片字段!", "提示!");
groupBox1.Enabled = true;
groupBox2.Enabled = true;
bt_pic_path.Enabled = true;
}
}
/// <summary>
/// 检查表是否存在
/// </summary>
/// <param name="username"></param>
/// <param name="userpwd"></param>
/// <param name="datasource"></param>
/// <param name="tablename"></param>
/// <returns></returns>
public static DataTable CheckTable(string username, string userpwd, string datasource, string tablename)
{
DataTable dt = new DataTable();
string connectionString = string.Format("Persist Security Info=False;Data Source='{0}';User ID='{1}';Password='{2}'", datasource, username, userpwd);
using (OracleConnection conn = new OracleConnection(string.Format(connectionString)))
{
conn.Open();
try
{
using (OracleCommand cmd = conn.CreateCommand())
{
cmd.CommandText = string.Format("SELECT * FROM " + tablename);
OracleDataAdapter adapter = new OracleDataAdapter(cmd);
adapter.Fill(dt);
return dt;
conn.Close();
cmd.Clone();
adapter.Dispose();
}
}
catch
{
MessageBox.Show(tablename + "表不存在,请查证后再测!", "提示!");
dt = null;
return dt;
conn.Close();
}
}
}
/// <summary>
/// 开始导入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void bt_pic_path_Click(object sender, EventArgs e)
{
if ((cmb_zhujian.Text != "") && (cmb_picname.Text != "") && (cmb_pic.Text != ""))
{
if ((rb_create.Checked) || (rb_update.Checked))
{
string path = null;
FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
try
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
path = folderBrowserDialog1.SelectedPath;
}
DirectoryInfo dir = new DirectoryInfo(path);//文件路径
//数组接收获得所有文件
FileInfo[] files = dir.GetFiles();
//循环文件夹
if (rb_create.Checked)
{
Commen.DeleteTableData(USERNAME, USERPWD, DATASOURCE, txt_table.Text);//删除表之前的数据
}
foreach (FileInfo file in files)
{
//获得扩展名
string ex = file.Extension;
//判断扩展名
if (ex == ".jpg")
{
picName = file.Name.Substring(0, file.Name.Length - 4);
fileName = path + '\\' + file.Name;
fileData = getBytes(fileName);
if (fileData == null) return;
MemoryStream ms = new MemoryStream(fileData);
Bitmap bmpt = new Bitmap(ms);
pb_img.Image = bmpt;
if (rb_create.Checked)
{
bt_start_Click(null, null);
}
else if (rb_update.Checked)
{
UpdatePic();
}
countPic++;
}
}
if (countPic != 0)
{
if (rb_create.Checked)
{
MessageBox.Show(countPic + "个图片保存成功!", "提示");
}
else if (rb_update.Checked)
{
MessageBox.Show(countPic + "个图片更新成功!", "提示");
}
}
else
{
countPic = 0;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
}
}
else
{
MessageBox.Show("必须选择一个模式!", "提示");
}
}
else
{
MessageBox.Show("图片必备字段不能为空,请查看!", "提示");
}
}
<pre name="code" class="html">
/// <summary>
/// 开始导入事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void bt_start_Click(object sender, EventArgs e)
{
if (fileData == null)
{
MessageBox.Show("图片为空!请检查文件夹是否有图片!", "提示");
return;
}
try { Commen.SetImage(USERNAME, USERPWD, DATASOURCE, txt_table.Text,countPic, fileData,picName,cmb_picname.Text,cmb_pic.Text,cmb_zhujian.Text); }
catch (Exception ex)
{
MessageBox.Show("保存失败!", "提示");
return;
}
}
public static void SetImage(string username, string userpwd, string datasource, string tablename,int countPic, byte[] fileData,string picName,string picNameZiDuan,string picZiduan,string zhujian)
{
string connectionString = string.Format("Persist Security Info=False;Data Source='{0}';User ID='{1}';Password='{2}'", datasource, username, userpwd);
string sql = string.Format("INSERT INTO {0} ({1},{2},{3}) values ({4},'{5}',:IMGDATA)", tablename, zhujian, picNameZiDuan, picZiduan,countPic,picName);
OracleConnection conn = new OracleConnection(string.Format(connectionString));
System.Data.OracleClient.OracleCommand oraComm = new System.Data.OracleClient.OracleCommand(sql, conn);
oraComm.Parameters.Add(":IMGDATA", System.Data.OracleClient.OracleType.Blob);//添加参数
oraComm.Parameters[":IMGDATA"].Value = fileData;//为参数赋值
conn.Open();
oraComm.ExecuteNonQuery();
oraComm.Dispose();
conn.Close();
conn.Dispose();
}
public static void UpdateImage(string username, string userpwd, string datasource, string tablename, byte[] fileData, string picName, string picNameZiDuan, string picZiduan)
{
string connectionString = string.Format("Persist Security Info=False;Data Source='{0}';User ID='{1}';Password='{2}'", datasource, username, userpwd);
string sql = string.Format("UPDATE {0} SET {1}=:IMGDATA WHERE {2} = {3}", tablename, picZiduan,picNameZiDuan, picName);
OracleConnection conn = new OracleConnection(string.Format(connectionString));
System.Data.OracleClient.OracleCommand oraComm = new System.Data.OracleClient.OracleCommand(sql, conn);
oraComm.Parameters.Add(":IMGDATA", System.Data.OracleClient.OracleType.Blob);//添加参数
oraComm.Parameters[":IMGDATA"].Value = fileData;//为参数赋值
conn.Open();
oraComm.ExecuteNonQuery();
oraComm.Dispose();
conn.Close();
conn.Dispose();
}
public static void DeleteTableData(string username, string userpwd, string datasource, string tablename)
{
string connectionString = string.Format("Persist Security Info=False;Data Source='{0}';User ID='{1}';Password='{2}'", datasource, username, userpwd);
string sql2 = string.Format("DELETE FROM {0}", tablename);
OracleConnection conn = new OracleConnection(string.Format(connectionString));
System.Data.OracleClient.OracleCommand oraComm2 = new System.Data.OracleClient.OracleCommand(sql2, conn);
conn.Open();
oraComm2.ExecuteNonQuery();
oraComm2.Dispose();
conn.Close();
conn.Dispose();
}