C# 如何仅将excel工作表中的新行插入数据库
我正在将数据从excel工作表导入数据库。我能够成功地将数据从excel导入数据库。我想知道如何在不添加以前的数据的情况下仅将新行从excel工作表添加到数据库C# 如何仅将excel工作表中的新行插入数据库,c#,C#,我正在将数据从excel工作表导入数据库。我能够成功地将数据从excel导入数据库。我想知道如何在不添加以前的数据的情况下仅将新行从excel工作表添加到数据库 for (int i = 0; i < exceltable.Rows.Count; i++) { if (i > 1) { DataRow row = exceltable
for (int i = 0; i < exceltable.Rows.Count; i++)
{
if (i > 1)
{
DataRow row = exceltable.Rows[i];
object ID = row[0].ToString();
if (ID != null && !String.IsNullOrEmpty(ID.ToString().Trim()))
{
Int16 CustID = Convert.ToInt16(ID);
string CustName = row[1].ToString();
string CardScheme = row[2].ToString();
string Outlet = row[3].ToString();
string TerminalNum = row[4].ToString();
Int32 Terminal = Convert.ToInt32(TerminalNum);
string Date1 = row[5].ToString();
DateTime Date = Convert.ToDateTime(Date1);
string Time = row[6].ToString();
DateTime DateTime = Convert.ToDateTime(Time);
string Amount1 = row[7].ToString();
double Amount = Convert.ToDouble(Amount1);
string columnNames = "CustID,CustName,CardScheme,Outlet,TerminalNum,TranDate,TranDateTime,Amount";
string query1 = String.Format("insert into customer({0})values ('{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')", columnNames, CustID, CustName, CardScheme, Outlet, Terminal, Date, DateTime, Amount);
SqlCommand com = new SqlCommand(query1, connection);
com.ExecuteNonQuery();
}
**// else if (i==exceltable.Rows[exceltable.Rows.Count-1]-1)
//{
// DataRow Newrow = exceltable.NewRow();
// Newrow["CustID"] = row[0].ToString();
// Newrow["CustName"] = row[1].ToString();
// Newrow["CardScheme"] = row[2].ToString();
// Newrow["Outlet"] = row[3].ToString();
// Newrow["TerminalNum"] = row[4].ToString();
// Newrow["TranDate"] = row[5].ToString();
// Newrow["TranDateTime"] = row[6].ToString();
// Newrow["Amount"] = row[7].ToString();
// exceltable.Rows.Add(Newrow);
// exceltable.AcceptChanges();
//}**
}
}
DataRow lastrow=exceltable.Rows[exceltable.Rows.Count-1];
if(!String.IsNullOrEmpty(lastrow.ToString().Trim()))
{
string Count = lastrow[4].ToString();
Int16 TotalRows = Convert.ToInt16(Count);
string Sum = lastrow[7].ToString();
double TotalAmount = Convert.ToDouble(Sum);
SqlCommand cmd = new SqlCommand("insert into tblExcel(TotalRows,TotalAmount) values('"+TotalRows+"','"+TotalAmount+"')",connection);
cmd.ExecuteNonQuery();
}
return true;
}
for(int i=0;i1)
{
DataRow row=exceltable.Rows[i];
对象ID=行[0]。ToString();
if(ID!=null&&!String.IsNullOrEmpty(ID.ToString().Trim())
{
Int16 CustID=转换为Int16(ID);
字符串CustName=行[1]。ToString();
字符串CardScheme=行[2]。ToString();
字符串出口=行[3]。ToString();
string TerminalNum=行[4]。ToString();
Int32 Terminal=Convert.ToInt32(TerminalNum);
字符串Date1=行[5]。ToString();
DateTime日期=Convert.ToDateTime(日期1);
字符串时间=行[6]。ToString();
DateTime DateTime=Convert.ToDateTime(时间);
string Amount1=行[7]。ToString();
双倍金额=换算成双倍(金额1);
string columnNames=“CustID、CustName、CardScheme、Outlet、TerminalNum、transdate、transdatetime、Amount”;
string query1=string.Format(“插入客户({0})值({1}、{2}、{3}、{4}、{5}、{6}、{7}、{8}”)、列名、客户ID、客户名称、CardScheme、出口、终端、日期、日期时间、金额);
SqlCommand com=新的SqlCommand(query1,连接);
com.ExecuteNonQuery();
}
**//else if(i==exceltable.Rows[exceltable.Rows.Count-1]-1)
//{
//DataRow Newrow=exceltable.Newrow();
//Newrow[“CustID”]=行[0]。ToString();
//Newrow[“CustName”]=行[1]。ToString();
//Newrow[“CardScheme”]=第[2]行。ToString();
//Newrow[“Outlet”]=第[3]行。ToString();
//Newrow[“TerminalNum”]=行[4]。ToString();
//Newrow[“TranDate”]=行[5]。ToString();
//Newrow[“TranDateTime”]=行[6]。ToString();
//新行[“金额”]=行[7]。ToString();
//exceltable.Rows.Add(Newrow);
//exceltable.AcceptChanges();
//}**
}
}
DataRow lastrow=exceltable.Rows[exceltable.Rows.Count-1];
如果(!String.IsNullOrEmpty(lastrow.ToString().Trim()))
{
字符串计数=最后一行[4]。ToString();
Int16 TotalRows=转换为Int16(计数);
字符串总和=最后一行[7]。ToString();
double TotalAmount=换算成两倍(总和);
SqlCommand cmd=new-SqlCommand(“插入tblExcel(TotalRows,TotalAmount)值(““+TotalRows+”,“+TotalAmount+”)”,连接);
cmd.ExecuteNonQuery();
}
返回true;
}
现在我需要一些指导..上面的代码将数据从excel工作表插入数据库..现在我想知道我是否需要在代码中添加插入新行的代码,还是需要在其他地方添加代码,并且我也尝试过使用NewRow()datatable的方法,我在评论中对其进行了标记,因为我对此有疑问。我的方向是否正确。请指导我。如果没有直接的解决方案。你得想出一些窍门。
我要做的是,知道到目前为止我已经在数据库中插入了多少条记录(假设在最后插入了新的记录),然后任何超出该数字的记录都将添加到数据库中。您需要对照数据库中的数据检查数据。 应该有一个使该行唯一的键
var row = RowFromExcel(); //Row from Excel
var uniqueKey = row.Key;
if (!FindRowInDbWithKeyExists(uniqueKey))
{
//If not found in Db then insert new row.
}
为什么不将数据表上传到临时表中呢。只需运行delete语句即可删除主数据库表中已有的行。然后,您可以只插入其余的新行。如果未指定正在使用的数据库,则可以选择在插入时忽略重复记录,表必须具有主键 对于oracle(11g),您可以在insert语句中使用
ignore\u row\u on\u dupkey\u index
hint。
对于SQL Server,您需要使用
IGNORE\u DUP\u键创建索引
对于MySQL,您可以在insert语句中使用
IGNORE
hint
每次都必须处理整个excel工作表,但只有新行会插入到表中。您能解释一下RowFromExcel()和row.Key.是什么意思吗?Key.是一个属性吗?@Nazima,RowFromExcel()是一个返回类或值列表的方法,基本上就是excel行中的每个excel单元格。关键是哪个单元格使该行唯一。假设您正在返回一个列表字符串,使该行唯一的单元格是第二个单元格,您可以这样做。var uniqueKey=行[1];