c# orcale 用C#批量導入圖片到orcale的表中

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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章