这个问题不简单吧!
现在有个页面,功能是将excel文件导入到SQL数据库的,页面上有1个dropdownlist、1个input(file)和一个导入button,还有一个gridview
在导入的时候,有excel文件中的数据有可能于SQL表中的主键重复的,则不将此项导入到SQL。
问题,我想将excel文件中与SQL主键重复的数据现在是在gridview中.因为关系到好几个表,所以我想gridview的内容只能由CS代码进行操作。
例如:dropdownlist选择了student表
excel文件里有:
name sex age class
小明 男 18 5班
小红 女 18 4班
小黄 男 19 3班
SQL的student表里有: (name是主键)
name sex age class
小红 女 19 5班
我要将: name sex age class ←此数据为excel里的
小红 女 18 4班
显示在gridview中。。
我里面判断重复的代码
strSql = "select * from rsm_upsoscreen where roomid= ' " + myDs.Tables[0].Rows[i].ItemArray[0].ToString() + " 'and outscreenid= ' " + myDs.Tables[0].Rows[i].ItemArray[1].ToString() + " ' ";
SqlDataAdapter myAda = new SqlDataAdapter(strSql, mySqlConn);
myAda.Fill(myDs, "Temp ");
if (myAda.Fill(myDs, "Temp ") != 0)
{//将此记录加到DateSet里,我不会写。。
}
后面将如何将DateSet里的内容显示到gridview里呢
[解决办法]
//Excel文件的连接
string excelConnectionString = "Provider = Microsoft.Jet.OleDb.4.0; Data Source = " + Excel文件路径 + " ; Extended Properties=Excel 8.0; ";
OleDbConnection excelConn = new OleDbConnection(excelConnectionString);
excelConn.Open();
OleDbCommand excelCmd = new OleDbCommand( "SELECT * FROM [Sheet1$] ", excelConn);
//数据库的连接
string accessConnectionString = "Provider = Microsoft.Jet.OleDb.4.0; Data Source = " + 数据库路径;
OleDbConnection accessConn = new OleDbConnection(accessConnectionString);
accessConn.Open();
OleDbTransaction trans = accessConn.BeginTransaction();
string sql = "INSERT INTO [表] (字段) VALUES ( '{0} ', ...) ";
try
{
using (OleDbDataReader excelDr = excelCmd.ExecuteReader())
{
while (excelDr.Read())
{
OleDbCommand accessCmd = new OleDbCommand(string.Format(sql, System.Convert.ToString(excelDr[0])), accessConn);
accessCmd.Transaction = trans;
accessCmd.ExecuteNonQuery();
}
}
//添加成功,提交事务
trans.Commit();
}
catch (Exception ex)
{
//添加失败,回滚事务
trans.Rollback();
}
finally
{
//关闭数据库连接
excelConn.Close();
accessConn.Close();
}