0

ExcelシートをSQLサーバーデータベースにインポートしています。シートをインポートする前に特定のことを確認する必要があります。たとえば、パスポートと呼ばれる列があり、アルファベットのみで始まる値を持ち、残りの文字を数字として持つ必要があります(のみ)。

   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);
4

3 に答える 3

1

いいえ、できません。できることは、一括操作の前に検証を実行することです。

于 2012-10-31T09:55:22.807 に答える
0

Simple answer is 'NO'. You can not validate while performing SqlBulk operation. What you can do is to validate the Datatable before performing the SqlBulk operation.

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);
于 2012-10-31T09:53:17.517 に答える
0

Excel シートのアップロード中に、Excel セルの値の検証を実行したいと考えています。ふたつのやり方:

  1. Excel データをデータテーブルに取り込み、検証を実行して不一致を記録します。検証が終了したら、ユーザーにエラーを表示するか、それ以上エラーがない場合は sqlbulkcopy を実行します。これはすべて c# レベルで行われます。

  2. SQL フロントでは、Excel データをデータ テーブルに取り込み、データベースの一時テーブルで直接 sqlbulkcopy を実行します。次に、一括アップロードされたデータを検証してエラーを送信するストアド プロシージャを呼び出します。エラーが発生した場合は、ユーザーに警告します。それ以外の場合は、一括コピーを実行するか、ストアド プロシージャを呼び出して、一時テーブルから実際のテーブルにデータをプルします。

選んで。

于 2012-11-01T07:41:49.903 に答える