第一步首先:檢測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();
}