簡體   English   中英

使用SqlBulkCopy時如何比較excel單元格值的值?

[英]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單元格值的驗證。 兩種方式:

  1. 將Excel數據放入數據表中並進行驗證和記錄差異。 完成驗證后,將錯誤顯示給用戶,或者如果沒有更多錯誤,請執行sqlbulkcopy。 所有這些都是在c#級別完成的。

  2. 在sql方面,將Excel數據直接放入數據庫中的temp表中的datatable do sqlbulkcopy中。 然后調用一個存儲的proc,它將驗證批量上傳的數據並發出錯誤。 如果有錯誤警告用戶,則進行批量復制或調用存儲的proc將數據從臨時表中拉到實際表中。

你選。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM