繁体   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