c# orcale 用C#批量导入图片到orcale的表中

来源:互联网 发布:igmp端口号 编辑:程序博客网 时间:2024/06/07 00:41

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



0 0