日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

批量Excel数据导入Oracle数据库

發(fā)布時(shí)間:2025/5/22 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 批量Excel数据导入Oracle数据库 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

由于一直基于Oracle數(shù)據(jù)庫上做開發(fā),因此常常會需要把大量的Excel數(shù)據(jù)導(dǎo)入到Oracle數(shù)據(jù)庫中,其實(shí)如果從事SqlServer數(shù)據(jù)庫的開發(fā),那么思路也是一樣的,本文主要介紹如何導(dǎo)入Excel數(shù)據(jù)進(jìn)入Oracle數(shù)據(jù)庫的內(nèi)容。

一般我們拿到的Excel數(shù)據(jù),都會有一個(gè)表頭說明,然后下面是一連串的數(shù)據(jù)內(nèi)容,如下圖所示:

?

而Oracle中數(shù)據(jù)庫一般為英文名稱,中文名稱就需要轉(zhuǎn)義,為了方便導(dǎo)入,我把中文名稱對照數(shù)據(jù)庫的字段,把表頭修改為對應(yīng)的字段名稱,如果沒有數(shù)據(jù)庫對應(yīng)的字段,那么刪除Excel的無用列即可,如下所示。

?

首先我們在導(dǎo)入Excel的例子中加載顯示要導(dǎo)入的數(shù)據(jù),一個(gè)是為了直觀,第二個(gè)也是為了檢查數(shù)據(jù)的有效性,避免出錯(cuò),界面如下所示:

?

在介紹導(dǎo)入操作前,我們先要分析下數(shù)據(jù),否則就很容易出現(xiàn)錯(cuò)誤的語句,一般日期的格式、數(shù)字的格式就要特別注意,文本格式一般看是否超出字段的長度,一般成功導(dǎo)入前都會發(fā)生好多次的錯(cuò)誤問題,解決了這些格式的問題,基本上就OK了。如下面日期和數(shù)字的格式問題,就必須注意轉(zhuǎn)換為對應(yīng)的內(nèi)容格式:

?

?

下面介紹具體的顯示數(shù)據(jù)和導(dǎo)入數(shù)據(jù)的操作代碼:

?顯示Excel數(shù)據(jù)的代碼如下所示:

?代碼

????????private?string?connectionStringFormat?=?"Provider?=?Microsoft.Jet.OLEDB.4.0?;?Data?Source?=?'{0}';Extended?Properties=Excel?8.0";
????????
private?DataSet?myDs?=?new?DataSet();

????????
private?void?btnViewData_Click(object?sender,?EventArgs?e)
????????{
????????????
if?(this.txtFilePath.Text?==?"")
????????????{
????????????????MessageUtil.ShowTips(
"請選擇指定的Excel文件");
????????????????
return;
????????????}

????????????
string?connectString?=?string.Format(connectionStringFormat,?this.txtFilePath.Text);
????????????
try
????????????{
????????????????myDs.Tables.Clear();
????????????????myDs.Clear();
????????????????OleDbConnection?cnnxls?
=?new?OleDbConnection(connectString);
????????????????OleDbDataAdapter?myDa?
=?new?OleDbDataAdapter("select?*?from?[Sheet1$]",?cnnxls);
????????????????myDa.Fill(myDs,?
"c");

????????????????dataGrid1.DataSource?
=?myDs.Tables[0];
????????????}
????????????
catch?(Exception?ex)
????????????{
????????????????MessageBox.Show(ex.Message);
????????????}
????????}

?

?

導(dǎo)入操作的代碼如下所示(由于數(shù)據(jù)格式需要驗(yàn)證,以及需要判斷數(shù)據(jù)庫是否存在指定關(guān)鍵字的記錄,如果存在,那么更新,否則插入新的記錄,如果僅僅是第一次導(dǎo)入,操作代碼可以更為精簡一些):

?代碼

????????private?void?btnSaveData_Click(object?sender,?EventArgs?e)
????????{
????????????
if?(this.txtFilePath.Text?==?"")
????????????{
????????????????MessageUtil.ShowTips(
"請選擇指定的Excel文件");
????????????????
return;
????????????}

????????????
if?(MessageUtil.ShowYesNoAndWarning("該操作將把數(shù)據(jù)導(dǎo)入到系統(tǒng)的用戶數(shù)據(jù)庫中,您確定是否繼續(xù)?")?==?DialogResult.Yes)
????????????{
????????????????InsertData();
????????????}
????????}

????????
private?bool?CheckIsDate(string?columnName)
????????{
????????????
string?str?=?",PREPARE_DATE,COPY_DATE,COPY_VALIDITY,BUSINESS_VALIDITY,OPENING_APPROVAL_DATE,OPENING_DATE,EDITTIME,LICENSE_DATE,LICENSE_VALIDITY,TEMP_OPENING_DATE,LICENSE_START_DATE,ADDTIME,EDITTIME,";
????????????
return?str.Contains(","?+?columnName.ToUpper()?+?",");
????????}

????????
private?bool?CheckIsNumeric(string?columnName)
????????{
????????????
string?str?=?",FIXED_CAPITAL,REG_CAPITAL,MARGIN,PARK_AREA,PARK_SPACE_NUMBER,";
????????????
return?str.Contains(","?+?columnName.ToUpper()?+?",");
????????}

????????
private?void?InsertData()
????????{
????????????
int?intOk?=?0;
????????????
int?intFail?=?0;

????????????
if?(myDs?!=?null?&&?myDs.Tables[0].Rows.Count?>?0)
????????????{
????????????????
string?accessConnectString?=?config.GetConnectionString("DataAccess");
????????????????OracleConnection?conn?
=?new?OracleConnection(accessConnectString);
????????????????conn.Open();
????????????????OracleCommand?com?
=?null;

????????????????
#region?組裝字段列表
????????????????
string?insertColumnString?=?"ID,";
????????????????DataTable?dt?
=?myDs.Tables[0];
????????????????
int?k?=?0;
????????????????
foreach?(DataColumn?col?in?dt.Columns)
????????????????{
????????????????????insertColumnString?
+=?string.Format("{0},",?col.ColumnName);
????????????????}
????????????????insertColumnString?
=?insertColumnString.Trim(',');

????????????????
#endregion

????????????????
try
????????????????{
????????????????????
foreach?(DataRow?dr?in?dt.Rows)
????????????????????{
????????????????????????
if?(dr[0].ToString()?==?"")
????????????????????????{
????????????????????????????
continue;
????????????????????????}

????????????????????????
#region?組裝Sql語句
????????????????????????
string?insertValueString?=?"SEQ_TBPARK_ENTERPRISE.Nextval,";
????????????????????????
string?updateValueString?=?"";
????????????????????????
string?COMPANY_CODE?=?dr["COMPANY_CODE"].ToString().Replace("<空>",?"");

????????????????????????
#region?拼接Sql字符串

????????????????????????
for(int?i?=?0;?i?<?dt.Columns.Count;?i++)
????????????????????????{
????????????????????????????
string?originalValue?=?dr[i].ToString().Replace("<空>",?"");
????????????????????????????
//if?(!CheckIsDate(dt.Rows[0][i].ToString()))
????????????????????????????if?(!CheckIsDate(dt.Columns[i].ColumnName))
????????????????????????????{
????????????????????????????????
if?(!string.IsNullOrEmpty(originalValue))
????????????????????????????????{
????????????????????????????????????
if?(CheckIsNumeric(dt.Columns[i].ColumnName))
????????????????????????????????????{
????????????????????????????????????????insertValueString?
+=?string.Format("'{0}',",?Convert.ToDecimal(originalValue));
????????????????????????????????????????updateValueString?
+=?string.Format("{0}='{1}',",?dt.Columns[i].ColumnName,?Convert.ToDecimal(originalValue));
????????????????????????????????????}
????????????????????????????????????
else
????????????????????????????????????{
????????????????????????????????????????insertValueString?
+=?string.Format("'{0}',",?originalValue);
????????????????????????????????????????updateValueString?
+=?string.Format("{0}='{1}',",?dt.Columns[i].ColumnName,?originalValue);
????????????????????????????????????}
????????????????????????????????}
????????????????????????????????
else
????????????????????????????????{
????????????????????????????????????insertValueString?
+=?string.Format("NULL,");
????????????????????????????????????updateValueString?
+=?string.Format("{0}=NULL,",?dt.Columns[i].ColumnName);
????????????????????????????????}
????????????????????????????}
????????????????????????????
else
????????????????????????????{
????????????????????????????????
if?(!string.IsNullOrEmpty(originalValue))
????????????????????????????????{
????????????????????????????????????insertValueString?
+=?string.Format("to_date('{0}','yyyy-mm-dd'),",?Convert.ToDateTime(originalValue).ToString("yyyy-MM-dd"));
????????????????????????????????????updateValueString?
+=?string.Format("{0}=to_date('{1}','yyyy-mm-dd'),",?dt.Columns[i].ColumnName,?Convert.ToDateTime(originalValue).ToString("yyyy-MM-dd"));
????????????????????????????????}
????????????????????????????????
else
????????????????????????????????{
????????????????????????????????????insertValueString?
+=?string.Format("NULL,");
????????????????????????????????????updateValueString?
+=?string.Format("{0}=NULL,",?dt.Columns[i].ColumnName);
????????????????????????????????}
????????????????????????????}
????????????????????????}
????????????????????????insertValueString?
=?insertValueString.Trim(',');
????????????????????????updateValueString?
=?updateValueString.Trim(',');?
????????????????????????
#endregion

????????????????????????
string?insertSql?=?string.Format(@"INSERT?INTO?tbpark_enterprise?({0})?VALUES({1})",?insertColumnString,?insertValueString);
????????????????????????
string?updateSql?=?string.Format("Update?tbpark_enterprise?set?{0}?Where?COMPANY_CODE='{1}'?",?updateValueString,?COMPANY_CODE);
????????????????????????
string?checkExistSql?=?string.Format("Select?count(*)?from?tbpark_enterprise?where?COMPANY_CODE='{0}'?",?COMPANY_CODE);
????????????????????????
#endregion

????????????????????????
#region?寫入數(shù)據(jù)
????????????????????????
try
????????????????????????{
????????????????????????????com?
=?new?OracleCommand();
????????????????????????????com.Connection?
=?conn;
????????????????????????????com.CommandText?
=?checkExistSql;
????????????????????????????
object?objCount?=?com.ExecuteScalar();

????????????????????????????
bool?succeed?=?false;
????????????????????????????
bool?exist?=?Convert.ToInt32(objCount)?>?0;
????????????????????????????
if?(exist)
????????????????????????????{
????????????????????????????????
//需要更新
????????????????????????????????
//WriteString(updateSql);
????????????????????????????????com.CommandText?=?updateSql;
????????????????????????????????succeed?
=?com.ExecuteNonQuery()?>?0;
????????????????????????????}
????????????????????????????
else
????????????????????????????{
????????????????????????????????
//需要插入
????????????????????????????????
//WriteString2(insertSql);
????????????????????????????????com.CommandText?=?insertSql;
????????????????????????????????succeed?
=?com.ExecuteNonQuery()?>?0;
????????????????????????????}

????????????????????????????
if?(succeed)
????????????????????????????{
????????????????????????????????intOk
++;
????????????????????????????}
????????????????????????????
else
????????????????????????????{
????????????????????????????????intFail
++;
????????????????????????????}
????????????????????????}
????????????????????????
catch?(Exception?ex)
????????????????????????{
????????????????????????????intFail
++;
????????????????????????????WriteString(com.CommandText);
????????????????????????????LogHelper.Error(ex);
????????????????????????????
break;
????????????????????????}

????????????????????????
#endregion
????????????????????}

????????????????????
#region?關(guān)閉
????????????????????
if?(conn?!=?null?&&?conn.State?!=?ConnectionState.Closed)
????????????????????{
????????????????????????conn.Close();
????????????????????}
????????????????????
if?(com?!=?null)
????????????????????{
????????????????????????com.Dispose();
????????????????????}
????????????????????
#endregion
????????????????}
????????????????
catch?(Exception?ex)
????????????????{
????????????????????LogHelper.Error(ex);
????????????????????MessageUtil.ShowError(ex.ToString());
????????????????}

????????????????
if?(intOk?>?0?||?intFail?>?0)
????????????????{
????????????????????
string?tips?=?string.Format("數(shù)據(jù)導(dǎo)入成功:{0}個(gè),失敗:{1}個(gè)",?intOk,?intFail);
????????????????????MessageUtil.ShowTips(tips);
????????????????}
????????????}
????????}

?

以上代碼,為了方便,使用了輸出腳本的方式進(jìn)行驗(yàn)證對比,一般情況下也是用得著的。

最后附上該程序的源碼,和大家分享學(xué)習(xí):http://files.cnblogs.com/wuhuacong/ImportExcelToOracle.rar?

轉(zhuǎn)載于:https://www.cnblogs.com/wuhuacong/archive/2010/04/28/1723142.html

總結(jié)

以上是生活随笔為你收集整理的批量Excel数据导入Oracle数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久在线免费视频 | 尤物视频在线播放 | 999zyz玖玖资源站永久 | 国色天香网站 | 老色驴综合网 | 国产三级三级在线观看 | 人妻少妇久久中文字幕 | 欧美a级在线免费观看 | 亚洲激情一区二区三区 | 黄色网址在线看 | 精品国产午夜福利 | 天天色一色 | 日本特级黄色大片 | 成人免费一级视频 | 亚洲精品大片www | 国产强被迫伦姧在线观看无码 | 欧美变态绿帽cuckold | 亚洲在线资源 | 美女一级视频 | www黄色网 | 肉嫁高柳家 高清 | 女性向片在线观看 | 小早川怜子久久精品中文字幕 | 人人射人人干 | 精品国产一区二区不卡 | 蜜桃久久久aaaa成人网一区 | 国产又黄又爽视频 | 久久成人一区 | 国产资源视频 | 亚洲成av人在线观看 | 国语对白做受69 | 女生张开腿让男生插 | 在线观看日韩精品 | 人妻饥渴偷公乱中文字幕 | 91超碰在线播放 | 日韩欧美激情在线 | 久久久久麻豆v国产精华液好用吗 | 国产精品日日摸天天碰 | 国产涩涩 | 亚州av| 国产毛片在线视频 | 国产精品成人国产乱一区 | 在线观看国产成人 | 9l视频自拍九色9l视频 | av专区在线 | 一区二区不卡 | 亚洲毛片一区 | 夜夜操天天干 | 国产又粗又猛又黄又爽的视频 | 久久久久久免费毛片精品 | 中文天堂在线资源 | 欧美第七页 | 神马午夜嘿嘿 | 欧美日韩精品一区二区 | 高潮一区二区三区 | 美女又黄又免费 | 在线中文字日产幕 | 欧美一区不卡 | 污视频软件在线观看 | 国产拍拍视频 | 91av视频 | 国产不雅视频 | 少妇一级淫片免费视频 | 欧美性欧美zzzzzzzzz | 亚洲国产中文字幕 | 亚洲天堂久久久 | 国产一级特黄aaa大片 | 亚洲五码av| 天堂中文字幕在线 | 日韩一区二区三区四区五区六区 | 国产精品日日摸天天碰 | 亚洲精品一区二三区不卡 | 影音先锋91 | 国产91精选| 成人午夜网站 | 色老头在线观看 | 欧美一区二区三区在线观看 | 人妻毛片 | av网站在线观看不卡 | 日韩精彩视频在线观看 | 亚洲涩涩图| 99色综合网 | 穿情趣内衣被c到高潮视频 欧美性猛交xxxx黑人猛交 | 精品久久香蕉国产线看观看亚洲 | 欧美视频在线不卡 | 亚洲熟女少妇一区 | 欧美破处女 | 人妻少妇精品一区二区三区 | 欧美高清二区 | 国产精品一区二区免费视频 | 禁漫天堂黄漫画无遮挡观看 | 欧美三级视频网站 | 国产欧美一区二区视频 | 揉我啊嗯~喷水了h视频 | 国产啊v在线 | 538在线精品 | 久久高清无码电影 | 精品无码在线视频 | 嫩草嫩草嫩草嫩草 |