读书人

怎么判断导入数据库的excel表是否有重

发布时间: 2012-12-21 12:03:49 作者: rapoo

如何判断导入数据库的excel表是否有重复记录?
现在要向数据库导入一张excel表,通过判断excel表中的姓<vcFirstName>,名<vcLastName>,联系方式<vcTel>来判断数据是否有重复的。如果有重复的话,把这些重复的记录<只用取出iUserID,vcFirstName,vcLastName,vcTel>取出来生成到另外一张excel表中,并可以导出来。最好能写一个方法,谢谢啦!!
[最优解释]
DataTable dt = new DataTable();
DataRow row = dt.NewRow();
List<string> lstKey = new List<string>();
if (lstKey.Contains(vcFirstName + vcLastName + vcTel))
row["iUserID"] = iUserID;
row["vcFirstName"] = vcFirstName;
row["vcLastName"] = vcLastName;
row["vcTel"] = vcTel;
dt.Rows.Add(row);
else
lstKey.Add(vcFirstName + vcLastName + vcTel);
//TODO Export dt
[其他解释]
using System.Data.SqlClient;
using System.Data.OleDb;

string strCon = ConfigurationManager.ConnectionStrings["strcon"].ConnectionString;
SqlConnection cn = new SqlConnection(strCon);
cn.Open();
string filename = DateTime.Now.ToString("yyyymmddhhMMss") + FileUpload1.FileName; //获取Execle文件名 DateTime日期函数
string savePath = Server.MapPath(("~\\upfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
FileUpload1.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上
DataSet ds = ExecleDs(savePath, filename);//调用自定义方法(返回一个数据集)
Session["ds"] =ds;
DataRow[] dr = ds.Tables[0].Select(); //定义一个DataRow数组
int rowsnum = ds.Tables[0].Rows.Count;
if (rowsnum == 0)
{
Response.Write("<script>alert('Excel表为空表,无数据!')</script>");
return;//当Excel表为空时,对用户进行提示
}
else
{


for (int i = 0; i < dr.Length; i++)
{
string barcode = dr[i]["vcFirstName"].ToString();
string endbarcode = dr[i]["vcLastName"].ToString();

for (int j = i + 1; j < dr.Length; j++)//验证excel中是否有重复的数据,2个for循环比对
{
if (barcode.Equals(dr[j]["vcFirstName"].ToString()))
{
Response.Write("<script>alert('Excel表中" + (i + 1) + "与" + (j + 1) + "行重复!')</script>");
return;//这里我只是把重复的数据提示出来。
}
}
}



#region 导入excel数据集的方法 返回一个数据集的对象
public DataSet ExecleDs(string filenameurl, string table)
{
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filenameurl + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataSet ds = new DataSet();
OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn);
odda.Fill(ds, table);
return ds;
}
#endregion
[其他解释]
建议 先读取到 datatable 中
在datatable中 过滤 重复的
可能要循环了
[其他解释]
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\a.xls";User ID=Admin;Password=;Extended properties=Excel 8.0')...[Sheet1$]
上传excel文档到服务器,再打开服务器上excel导入数据到数据库。
遍历excel,实现数据集更新,插入数据到数据库
using(OleDbConnection myConn = new OleDbConnection(""))
{
myConn.Open();
string str = "SELECT * FROM [Sheet1$]";
OleDbDataAdapter myCommand = new OleDbDataAdapter(str, myConn);


DataSet ds= new DataSet();
myCommand.Fill(ds);
myConn.Close();
}
重复判断
if not exists (select 1 from dt where id=@id) insert ..
[其他解释]
可以直接Select Distinct Excel也是一种数据库
[其他解释]
DataTable 遍历一遍,再判断处理
[其他解释]
xuexi yixia
[其他解释]
读到dataset,通过列的select要循环比较。这个过程比较烦躁了。数据库中直接操作!查询重复。
参考代码!

select id,name,count(*)    
from data2 group by id,name
having count(*) > 1 //根据id和name判断重复


删除重复项,只保留最新的
create table data2 as
select a.id,a.name,MAX(a.ROWID) dataid
from data3 a GROUP BY a.id,a.name;
delete from data3 a
where a.rowid !=
(
select b.dataid from data2 b
where a.id = b.id and
a.name = b.name
);
commit;

[其他解释]
你以试着读取每一个Excle单元格的内容,编写sql语句判断是否重复,控制写入内容。
1、用VSTO读取Excel单元格内容:
纯C#代码的Excel读取源代码

Stream fileStream = File.OpenRead(file);
Workbook book = new Workbook();
book.Open(fileStream);
Worksheet sheet = book.Worksheets[0];


int row = 1;
int col = 0;
string ID = sheet.Cells[row, col].StringValue;

Picture pic = sheet.ExtractPicture(row, col);


参考:
C#读取excel数据

2、判断是否存在的语句,你只要在读取后,写sql判断就可以,这一块,应该对你没有问题吧。 阿捷
[其他解释]
感觉还是用循环DataTable比较容易修改,如果采用上传的话,也许会不安全,本人很愚昧的见解
[其他解释]
应该是读到DATATABLE里面再比较吧
[其他解释]
可以通过遍历去实现,不过数据量很不小```
[其他解释]
1楼的蛮好 自己改呗~
[其他解释]
我现在是要在别人的代码上面稍作修改.原来的代码没有用到Datatabel. 谢谢楼上和楼下的各位啦。
[其他解释]
引用:
你以试着读取每一个Excle单元格的内容,编写sql语句判断是否重复,控制写入内容。
1、用VSTO读取Excel单元格内容:
纯C#代码的Excel读取源代码

C# code

Stream fileStream = File.OpenRead(file);
Workbook book = new Workbook();
book.Open(fileStream);
Work……


这是我之前的同事做的项目,现在客户反馈问题,交给我来修改了.如果只是简单的的sql语句判断也没什么,现在还要理解他的代码的逻辑,哎 烦死人啦..顺便说一下,我是新人..
[其他解释]
大大大大大大大大大大大大
[其他解释]
如果是:现在要向数据库导入一张excel表,通过判断excel表中的姓<vcFirstName>,名<vcLastName>,联系方式<vcTel>来判断数据是否有重复的。如果有重复的,该表所有数据都不让存进数据库,且将重复的数据提示出来,有什么好方法吗?thx

读书人网 >C#

热点推荐