[英]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.