![](/img/trans.png)
[英]How can i skip extra rows in excel while importing it into database using SqlBulkCopy?
[英]How can i compare the values of excel cell values while using SqlBulkCopy?
我正在将Excelsheet导入sql服务器数据库,我需要在导入工作表之前检查某些事情,例如我有一列名为passport的列,该列的值必须仅以字母开头,并且其余字符必须为数字(仅)。
DataTable dt7 = new DataTable();
dt7.Load(dr);
DataRow[] ExcelRows = new DataRow[dt7.Rows.Count];
// Bulk Copy to SQL Server
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
{
bulkCopy.DestinationTableName = "ExcelTable";
dt7.Rows.CopyTo(ExcelRows, 0);
for (int i = 0; i < ExcelRows.Length; i++)
{
if (ExcelRows[i]["data"] == DBNull.Value)
{
// Include any actions to perform if there is no date
//ExcelRows[i]["data"] = Convert.ToString(0);
}
else
{
DateTime oldDate = Convert.ToDateTime(ExcelRows[i]["data"]).Date;
DateTime newDate = Convert.ToDateTime(oldDate).Date;
ExcelRows[i]["data"] = newDate.ToString("yyyy/MM/dd");
}
}
bulkCopy.WriteToServer(ExcelRows);
不,你不能。 您可以做的是在批量操作之前执行验证。
简单的答案是'NO'
。 执行SqlBulk操作时无法验证。 您可以做的是在执行SqlBulk操作之前验证Datatable
。
private bool Validate(Datatable dt)
{
//Perform your validation
// return true/false
}
DataTable dt7 = new DataTable();
dt7.Load(dr);
DataRow[] ExcelRows = new DataRow[dt7.Rows.Count];
// Bulk Copy to SQL Server
// Perform your validation here. If not validated then skip with some message.
if(!Validate(dt7))
{
//Show Message
return;
}
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
{
bulkCopy.DestinationTableName = "ExcelTable";
dt7.Rows.CopyTo(ExcelRows, 0);
for (int i = 0; i < ExcelRows.Length; i++)
{
if (ExcelRows[i]["data"] == DBNull.Value)
{
// Include any actions to perform if there is no date
//ExcelRows[i]["data"] = Convert.ToString(0);
}
else
{
DateTime oldDate = Convert.ToDateTime(ExcelRows[i]["data"]).Date;
DateTime newDate = Convert.ToDateTime(oldDate).Date;
ExcelRows[i]["data"] = newDate.ToString("yyyy/MM/dd");
}
}
bulkCopy.WriteToServer(ExcelRows);
您要在上传excel工作表时执行excel单元格值的验证。 两种方式:
将Excel数据放入数据表中并进行验证和记录差异。 完成验证后,将错误显示给用户,或者如果没有更多错误,请执行sqlbulkcopy。 所有这些都是在c#级别完成的。
在sql方面,将Excel数据直接放入数据库中的temp表中的datatable do sqlbulkcopy中。 然后调用一个存储的proc,它将验证批量上传的数据并发出错误。 如果有错误警告用户,则进行批量复制或调用存储的proc将数据从临时表中拉到实际表中。
你选。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.