winform Execl数据 导入到数据库(SQL) 分类: WinForm C# 2014-05-09 20:52 191人阅读 评论(0) 收藏
首先,看一下我的窗体设计:
要插入的Excel表:
编码 | 名称 | 联系人 | 电话 | 省市 | 备注 |
100 | 100线 | 张三 | 12345678910 | 北京 | 测试 |
101 | 101线 | 张三 | 12345678910 | 上海 | 测试 |
102 | 102线 | 张三 | 12345678910 | 深圳 | 测试 |
103 | 103线 | 张三 | 12345678910 | 广州 | 测试 |
104 | 104线 | 张三 | 12345678910 | 福建 | 测试 |
105 | 105线 | 张三 | 12345678910 | 厦门 | 测试 |
106 | 106线 | 李四 | 12345678910 | 台湾 | 测试 |
107 | 107线 | 李四 | 12345678910 | 石家庄 | 测试 |
108 | 108线 | 李四 | 12345678910 | 合肥 | 测试 |
109 | 109线 | 李四 | 12345678910 | 东城 | 测试 |
110 | 110线 | 李四 | 12345678910 | 丰台 | 测试 |
111 | 111线 | 李四 | 12345678910 | 朝阳 | 测试 |
112 | 112线 | 王五 | 12345678910 | 海淀 | 测试 |
113 | 113线 | 王五 | 12345678910 | 昌平 | 测试 |
114 | 114线 | 王五 | 12345678910 | 大兴 | 测试 |
115 | 115线 | 王五 | 12345678910 | 西城 | 测试 |
116 | 116线 | 王五 | 12345678910 | 通州 | 测试 |
117 | 117线 | 赵六 | 12345678910 | 石景山 | 测试 |
118 | 118线 | 赵六 | 12345678910 | 门头沟 | 测试 |
119 | 119线 | 赵六 | 12345678910 | 房山 | 测试 |
后台代码:
/
private void btnFindFile_Click(object sender, EventArgs e)
{
#region 选择文件按钮事件
openFile.Multiselect = true;
openFile.FileName = "";
openFile.Filter = "(*.xlsx,*.xls)|*.xlss;*.xls";
openFile.ShowDialog();
openFile.Reset();
#endregion
}
private void openFile_FileOk(object sender, CancelEventArgs e)
{
#region 打开文件(确定事件)
try
{
if (dgvData.Rows.Count > 0)
{
dgvData.Rows.Clear();
}
strFileName = openFile.FileNames;
strFilePath = openFile.SafeFileNames;
Microsoft.Office.Interop.Excel.Application excel1 = new Microsoft.Office.Interop.Excel.Application();
strFilePaths.Clear();//清空上次要导入的文件
for (int j = 0; j < strFileName.Length; j++)
{
string FileName = strFileName[j];
int rows = this.dgvData.Rows.Count;
this.dgvData.Rows.Add(1);//添加一行,不然数据不显示
//获取工作表名
object Nothing = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Workbook wbs = null;
//获取EXCEL中的第一张工作簿名称
wbs = excel1.Workbooks.Open(FileName, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing,Nothing, Nothing, Nothing, Nothing, Nothing);
Microsoft.Office.Interop.Excel.Worksheet SHT1 = (Microsoft.Office.Interop.Excel.Worksheet)wbs.Sheets[1];
string sheetname = SHT1.Name;
dgvData.Rows[j].Cells["XuHao"].Value=j+1;
dgvData.Rows[j].Cells["Lujing"].Value = FileName;
dgvData.Rows[j].Cells["Gongzuobiao"].Value = sheetname;
dgvData.Rows[j].Cells["Zhuangtai"].Value = "待导入";
}
Kill(excel1);
}
catch
{
return;
}
#endregion
}
private void btnStartIn_Click(object sender, EventArgs e)
{
#region 开始导入按钮
try
{
int row = 0;
int DataNum = dgvData.Rows.Count;//将要导入的表的数量
if (DataNum == 0)
{
PublicClass.ShowMessage("请先选择文件");
return;
}
DataSet[] dss = new DataSet[DataNum];
Microsoft.Office.Interop.Excel.Application m_objExcel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbooks workBooks = m_objExcel.Workbooks;
Object missing = 1;
//显示进度条
grbIn.Visible = true;
proJinDu.Visible = true;
string textName = "";//获取选择文件的名称
string sheetName = "";//获得选中工作表名称
// DataSet das;
for (int i = 0; i < DataNum;i++ )
{
textName = dgvData.Rows[i].Cells[1].Value.ToString(); //获得选中的文件的地址
sheetName = dgvData.Rows[i].Cells[2].Value.ToString(); //获得选中工作表名称
workBooks.Open(textName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
Microsoft.Office.Interop.Excel.Sheets objSheets = m_objExcel.Worksheets;
Microsoft.Office.Interop.Excel._Worksheet objSheet = (Microsoft.Office.Interop.Excel._Worksheet)objSheets[1];
//读取excel数据
dss[i] = GetDataBySheetName07(sheetName, textName);
row += dss[i].Tables[0].Rows.Count;
}
#region 循环表
int numcout = 0;//记录上一张工作表导入成功的记录条数
for (int j = 0; j < DataNum; j++)
{
DataSet ds = new DataSet();
ds=dss[j];
int ii = 1;//导入工作表中的当前行
textName = dgvData.Rows[j].Cells[1].Value.ToString(); //获得选中的文件的地址
sheetName = dgvData.Rows[j].Cells[2].Value.ToString(); //获得选中工作表名称
//声明导入对象
workBooks.Open(textName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
Microsoft.Office.Interop.Excel.Sheets objSheets = m_objExcel.Worksheets;
Microsoft.Office.Interop.Excel._Worksheet objSheet = (Microsoft.Office.Interop.Excel._Worksheet)objSheets[1];
//读取excel数据
ds = GetDataBySheetName07(sheetName, textName);
//row = ds.Tables[0].Rows.Count;
proJinDu.Minimum = 0;
proJinDu.Value = 0;
proJinDu.Maximum = row;
if (row == 0)
{
PublicClass.ShowMessage("当前选择的工作表没有数据信息!");
return;
}
#region 循环每张表的记录
for (int m = 0; m < ds.Tables[0].Rows.Count; m++)
{
try
{
ii++;
int_in++;//正在导入第XX条记录
string CarriersCode = ds.Tables[0].Rows[m][0].ToString().Trim();//承运商编码
string CarriersName = ds.Tables[0].Rows[m][1].ToString().Trim();//名称
string CarriersCity = ds.Tables[0].Rows[m][4].ToString().Trim();//省、市
//检查编码、名称是否为空
if (CarriersCode.Equals(""))
{
objSheet.Cells[ii, 7] = "编码不能为空!";
int_wrong++;
lblRecord.Text = "共" + row + "条记录,正在导入" + int_in + "条记录,错误" + int_wrong + "条!";
continue;
}
if (CarriersName.Equals(""))
{
objSheet.Cells[ii, 7] = "名称不能为空!";
int_wrong++;
lblRecord.Text = "共" + row + "条记录,正在导入" + int_in + "条记录,错误" + int_wrong + "条!";
continue;
}
if (CarriersCity.Equals(""))
{
objSheet.Cells[ii, 7] = "省市不能为空!";
int_wrong++;
lblRecord.Text = "共" + row + "条记录,正在导入" + int_in + "条记录,错误" + int_wrong + "条!";
continue;
}
//检查编码、名称是否存在
string ssql = "select * from T_Base_Carriers where Carriers_Code='" + CarriersCode + "' or Carriers_Name='" + CarriersName + "'";
DataSet ddss = DataAccess.GetDataSet(ssql, false, null);
if (ddss.Tables[0].Rows.Count > 0)
{
if (CarriersCode == ddss.Tables[0].Rows[0]["Carriers_Code"].ToString())
{
objSheet.Cells[ii, 7] = "编码已存在!";
int_wrong++;
lblRecord.Text = "共" + row + "条记录,正在导入" + int_in + "条记录,错误" + int_wrong + "条!";
continue;
}
if (CarriersName == ddss.Tables[0].Rows[0]["Carriers_Name"].ToString())
{
objSheet.Cells[ii, 7] = "名称已存在!";
int_wrong++;
lblRecord.Text = "共" + row + "条记录,正在导入" + int_in + "条记录,错误" + int_wrong + "条!";
continue;
}
}
object[] obj = new object[8];
obj[0] = doubleid;
obj[1] = CarriersCode;
obj[2] = CarriersName;
obj[3] = CarriersCity;
obj[4] = ds.Tables[0].Rows[m][2].ToString();
obj[5] = ds.Tables[0].Rows[m][3].ToString();
obj[6] = ds.Tables[0].Rows[m][5].ToString();
obj[7] = 1;
//obj[7] = Frm_Login.userID;
int hh = Convert.ToInt32(DataAccess.ExecuteNonQuery("P_Base_Carriers_Save", true, obj));
if (hh > 0)
{
int_right++;
}
else
{
int_wrong++;
}
}
catch
{
m_objExcel.Visible = true;
throw;
}
lblRecord.Text = "共" + row + "条记录,正在导入" + int_in + "条记录,错误" + int_wrong + "条!";
this.proJinDu.Value = int_in;
}
#endregion
lblRecord.Text = "共" + row + "条记录,导入成功" + (int_in - int_wrong) + "条记录,错误" + int_wrong + "条!";
this.proJinDu.Maximum = row - int_wrong;
this.proJinDu.Value = row - int_wrong;
numcout = int_right-numcout;
if (numcout < ds.Tables[0].Rows.Count)
{
dgvData.Rows[j].Cells[3].Value = "有错误记录";
}
else
{
dgvData.Rows[j].Cells[3].Value = "导入成功!";
}
}
#endregion
if (int_right < row)
{
//设置进度条不显示
grbIn.Visible = false;
proJinDu.Visible = false;
PublicClass.ShowMessage("共" + row + "条记录,导入成功" + int_right + "条记录,错误" + int_wrong + "条!");
m_objExcel.Visible = true;
System.Windows.Forms.Application.DoEvents();
return;
}
System.Windows.Forms.Application.DoEvents();
m_objExcel.Quit();
Kill(m_objExcel);
m_objExcel = null;
for (int s = 0; s < DataNum; s++)
{
dss[s].Dispose();
}
GC.Collect();
//设置进度条不显示
grbIn.Visible = false;
proJinDu.Visible = false;
PublicClass.ShowMessage("导入成功! 共" + row + "条记录,导入成功" + (int_in - int_wrong) + "条记录,错误" + int_wrong + "条!");
nowpage = 1;
DataBind();
PageState();
btnCancel.Focus();
}
catch (Exception ex)
{
PublicClass.ShowMessage(ex.Message);
}
#endregion
}
效果图:
备注:
1>代码多处调用了自定类,出于机密原因,不能贴出来,敬请原谅。
2>给需要帮助的人们一个思路,里面肯定有许多要完善的地方,大家共同学习。
版权声明:本文为博主原创文章,未经博主允许不得转载。
winform Execl数据 导入到数据库(SQL) 分类: WinForm C# 2014-05-09 20:52 191人阅读 评论(0) 收藏的更多相关文章
- UI基础:UIView(window,frame,UIColor,CGPoint,alpha,CGRect等) 分类: iOS学习-UI 2015-06-30 20:01 119人阅读 评论(0) 收藏
UIView 视图类,视图都是UIView或者UIView子类 UIWindow 窗口类,用于展示视图,视图一定要添加window才能显示 注意:一般来说,一个应用只有一个window 创建一个UIW ...
- OC基础:OC 基本数据类型与对象之间的转换方法 分类: ios学习 OC 2015-06-18 20:01 11人阅读 评论(0) 收藏
1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary ...
- HBase -ROOT-和.META.表结构(region定位原理) 分类: B7_HBASE 2015-03-13 20:52 90人阅读 评论(0) 收藏
在HBase中,大部分的操作都是在RegionServer完成的,Client端想要插入,删除,查询数据都需要先找到相应的RegionServer.什么叫相应的RegionServer?就是管理你要操 ...
- 哈希-Snowflake Snow Snowflakes 分类: POJ 哈希 2015-08-06 20:53 2人阅读 评论(0) 收藏
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 34762 Accepted: ...
- 选择排序 分类: 算法 c/c++ 2014-10-10 20:32 509人阅读 评论(0) 收藏
选择排序(假设递增排序) 每次选取从当前结点到末尾结点中最小的一个与当前结点交换,每一轮固定一个元素位置. 时间复杂度O(n^2),空间复杂度O(1).下面的示例代码以带头结点的链表为存储结构: #i ...
- Oracle 字符集的查看和修改 分类: H2_ORACLE 2013-06-19 16:52 316人阅读 评论(0) 收藏
一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库 ...
- 跨服务器备注SQL数据库 分类: SQL Server 2015-03-05 08:52 227人阅读 评论(0) 收藏
任务:把服务器1上的SQL数据库自动备份到服务器2上,命名格式=数据库名+年月日+小时. 说明: 服务器2=>192.168.0.22 数据库名=>Book 共享文件夹路径:192.168 ...
- winform清空DataGridView中的数据 分类: DataGridView 2014-05-19 20:56 180人阅读 评论(0) 收藏
我们一般要把dgv情况,一般用: DataTable dt = (DataTable)dgvData.DataSource; dt.Rows.Clear(); dgvData.DataSource = ...
- Winform Windows Media Player 简易播放器 分类: WinForm 2014-07-31 20:12 589人阅读 评论(0) 收藏
新手上路,高手勿进! 窗体设计: 实现效果: 实现代码: using System; using System.Collections.Generic; using System.ComponentM ...
随机推荐
- ASP.NET中扩展FileUpload的上传文件的容量
ASP.NET中扩展FileUpload只能上传小的文件,大小在4MB以内的.如果是上传大一点的图片类的可以在web.config里面扩展一下大小,代码如下 <system.web> &l ...
- JavaScript学习总结【3】、JS对象
在 JS 中一切皆对象,并提供了多个内置对象,比如:String.Array.Date 等,此外还支持自定义对象.对象只是一种特殊类型的数据,并拥有属性和方法,属性是与对象相关的值,方法是能够在对象上 ...
- ZendFramework使用中常见问题
MVC 代码书写:控制器代码书写:<?phpclass IndexController extends Zend_Controller_Action{ function init() { $th ...
- ServletContext与application的关系
ServletContext 就是application 生命周期是从servletContext创建到服务器关闭 其实servletContext和application 是一样的,就相当于一个类创 ...
- ruby特性
1. ruby类结构 每个类都是Class类的对象 所有类都继承自BasicObject类(Module类不能实例化) 2. 单例方法 单例方法可以不定义在类中,只为某个对象定义方法,所以称为单例方法 ...
- Codeforces 712C Memory and De-Evolution
Description Memory is now interested in the de-evolution of objects, specifically triangles. He star ...
- insert时出现主键冲突的处理方法【转载】
原文出处:http://hi.baidu.com/ytjwt/blog/item/1ccc2c26022b0608908f9d8c.html 使用"insert into"语句进行 ...
- CPU再烂,俺也支持虚拟化呀,再附送64位WINDOWS的IIS上配置支持PHP的注意事项
原来要对IIS进行降权,让他可以支持32位程式 cscript.exe %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/App ...
- 【BZOJ2434-[Noi2011]】阿狸的打字机(AC自动机(fail树)+离线+树状数组)
Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的 ...
- Python中classmethod与staticmethod区别
classmethod:类方法staticmethod:静态方法 在python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmethod 是一个函数修饰符,它表示 ...