日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久久日产精品 | 亚洲一区二区三区免费看 | 奴性白洁会所调教 | 最好看的2019年中文视频 | 天天干天天透 | 成人毛片18女人毛片 | 91高跟黑色丝袜呻吟在线观看 | 国产中文字幕在线观看 | 免费日批网站 | 日日人人 | 无码人妻aⅴ一区二区三区日本 | 精品国产污污免费网站入口 | www.日日干| 日本a v在线播放 | 欧美日韩一区二区三区 | 樱花视频在线免费观看 | 国产最新视频在线 | 91大片免费看 | 黄网站在线观看 | 性猛交xxxx乱大交孕妇2十 | 777国产成人入口 | 97视频在线观看免费高清完整版在线观看 | 欧美日韩中文 | 亚洲第一网站 | 韩国美女主播跳舞 | 日韩六九视频 | 国产精品人成在线观看免费 | 国产午夜精品一区二区理论影院 | 亚洲乱码av | 在线亚洲欧美 | 婷婷亚洲天堂 | 色视频在线观看 | 成人激情自拍 | 女同性69囗交| 日韩av免费在线播放 | 自拍偷拍av | 99久久精品免费看国产 | 亚洲成年人免费观看 | 天天艹日日干 | 久久这里| 国产大奶在线 | 日韩视频免费 | 蜜桃免费在线视频 | 亚洲国产中文字幕在线观看 | 国产999视频 | 国产叼嘿视频在线观看 | 中文字幕在线播 | 青青草视频网站 | 欧美网站在线 | 干干干日日日 | 国产精品自拍亚洲 | 色妇网| 国产精品18久久久久久久久 | 国产成a人亚洲精v品在线观看 | 精品视频免费 | 尤物网在线| 麻豆tube| 成人深夜福利视频 | 久久综合狠狠综合久久综合88 | 中文字幕日产 | 91久久久精品 | 韩国三级丰满少妇高潮 | 亚洲国产成人精品激情在线 | www婷婷av久久久影片 | 国产群p视频 | 丁香花国语版普通话 | 大桥未久恸哭の女教师 | www.88av| 欧美伦理一区二区 | 亚洲天堂三级 | 小婕子伦流澡到高潮h | 久久蜜桃精品 | 日本免费在线一区 | 亚洲成人精品久久久 | 干爹你真棒插曲免费 | 久久久国产精品无码 | 五月天婷婷社区 | 亚洲免费黄色网 | 色原网 | 麻豆视频91 | 午夜影片 | 色就操| 欧美三级图片 | 免费se99se| 精品免费视频一区二区 | 亚洲欧美日韩国产综合 | 不卡一区二区在线观看 | 国产视频在线免费观看 | 先锋影音av资源在线 | 卡一卡二在线视频 | 国产第一区第二区 | 久久久永久久久人妻精品麻豆 | 91视频麻豆 | 我会温柔一点的日剧 | 久久久久女人精品毛片九一 | 精品国产一二三区 | 国产精品99久久久久久人 | av官网| 高潮毛片又色又爽免费 |