2016-04-06 9 views
0

複数のレコードを含むExcelファイルをアップロードするASP.NET MVCアプリケーションでは、グリッド/テーブルに表示するシナリオがあります。C#からSQL Serverデータベースに書き込むたびに一組のレコードを一意に識別する方法

これらのレコードをデータベースに挿入すると、プロシージャに対してそれらのレコードを検証し、エラーを編集してもう一度再検証します。

ユーザーアップロードのレコードをグループ化して、ユーザーが再検証する必要があるときに特定のレコードを取得できるようにするにはどうすればよいですか?

例:

ユーザーアップロードし、ユーザBのアップロードは、すべてのレコードがデータベースに書き込まれます、どのように利用者Aは、その特定の時間あちこちに彼/彼女の特定のレコードを取得し、アップロードすることができます。

SQL Serverデータベースに書き込むASP.NET MVCアプリケーションでどのように管理できますか。アップロードごとにユーザーのドメイン名をデータベースに書きますが、ユーザーが特定の時間枠で2回アップロードするとどうなりますか?

基本的には、レコードの状態を管理して、特定の時間にアップロードしたレコードをユーザーが取得できるようにすることです。 C#、ASP.NET MVC、およびEntity Frameworkを使用してデータベースに書き込みます。

以下のコードを参考に、アプリケーションの柔軟性を高める方法を教えてください。

public ActionResult ValidateClaims() 
{ 
     List<CleanSupplierClaim> supplierClaimsData = TempData["supplierClaimsData"] as List<CleanSupplierClaim>; 
     //db.CleanSupplierClaims.ToList(); 
     //(List<CleanSupplierClaim>)TempData["claimsResponse"];//// 
     //= new List<SupplierClaimsUploadDisplayList>(); 
     CleanSupplierClaimData supplierClaimUplaod = new CleanSupplierClaimData(); 

     var sqlConnection = "data source=WMVSQL02;initial catalog=Embrace;integrated security=True;"; 

     using (SqlConnection conn = new SqlConnection(sqlConnection)) 
     { 
      try 
      { 
       foreach (var claim in supplierClaimsData) 
       { 
        SqlCommand cmd = new SqlCommand(); 
        cmd.CommandTimeout = 60; 
        SqlDataReader reader; 
        cmd.CommandText = "CRM.Supplier_Claim_Upload"; 
        cmd.CommandType = CommandType.StoredProcedure; 
        cmd.Parameters.Add("@Invoice", SqlDbType.NVarChar).Value = claim.Line_Number; 
        cmd.Parameters.Add("@Amount", SqlDbType.Decimal).Value = claim.Total_Claim; 

        cmd.Connection = conn; 
        //cmd.CommandTimeout = 1; 

        conn.Open(); 
        reader = cmd.ExecuteReader(); 

        while (reader.Read()) 
        { 
         claim.ST_Key = reader.GetString(reader.GetOrdinal("ST_Key")); 
         claim.Error_1 = reader.GetString(reader.GetOrdinal("Error1")); 

         string lineNumberDoesNotExist = "Error: Invoice line number does not exist"; 
         if (claim.Error_1.StartsWith(lineNumberDoesNotExist)) 
         { 
          continue; 
         } 

         claim.Warning = reader.GetString(reader.GetOrdinal("Warning")); 
         claim.Error_2 = reader.GetString(reader.GetOrdinal("Error2")); 

         var officialUserName = TempData["user"]; 

         claim.Domain_Username = officialUserName.ToString(); 

         Random rnd = new Random(); 
         int nextNumber = rnd.Next(); 

         if (claim.ST_Key != null && string.IsNullOrEmpty(claim.Warning) && string.IsNullOrEmpty(claim.Error_1) && string.IsNullOrEmpty(claim.Error_2)) 
         { 
          db.GPClaimsReadyToImports.Add(new GPClaimsReadyToImport 
          { 
           Id = claim.Id, 
           ST_Key = claim.ST_Key, 
           Warning = claim.Warning, 
           Action = claim.Action, 
           Claim_Reference = claim.ClaimReference, 
           Currency = claim.Currency, 
           Error_1 = claim.Error_1, 
           Error_2 = claim.Error_2, 
           Line_Numebr = claim.Line_Number, 
           Total_Claim = claim.Total_Claim, 
           Domain_Username = claim.Domain_Username, 
           DateCreated = DateTime.Now, 
           ImportFlag = true, 
           ReadyForImport = true 
          }); 

          db.SaveChanges(); 
         } 
         else 
         { 
          db.CleanSupplierClaims.Add(new CleanSupplierClaim 
          { 
           Id = claim.Id, 
           ST_Key = claim.ST_Key, 
           Warning = claim.Warning, 
           Action = claim.Action, 
           ClaimReference = claim.ClaimReference, 
           Currency = claim.Currency, 
           Error_1 = claim.Error_1, 
           Error_2 = claim.Error_2, 
           Line_Number = claim.Line_Number, 
           Total_Claim = claim.Total_Claim, 
           Domain_Username = claim.Domain_Username, 
           DateCreated = DateTime.Now, 
           ImportFlag = false, 
           ReadyForImport = false, 
          }); 
          db.SaveChanges(); 
         } 
        } 
       } 
      } 
     } 
} 
+0

にトランザクションIDを与え、データベースに書き込みます。 GUID、日時スタンプ、任意の数値/文字列、任意のものを指定できます。基本的にはレコードをある値でグループ化するだけです。 – DrewJordan

+0

@DrewJordanに追加する - IDをビューに書き込むか、urlに追加してIDをMVCアクションのパラメータとして受け取る必要があります。 –

答えて

0

データベースに新しいテーブル(たとえば、UploadSession)を追加する方法もあります。この表は、ユーザーが独自に作成したアップロードセッションを表しています。 この表には、ID列(自動生成ID)、ユーザーの列、および時間の列があります。 既存のテーブルにIDカラムの外部キーとなるUploadSessionIDカラムをUploadSessionに追加します。 データをアップロードするときに、UploadSessionテーブルに行を作成し、生成されたIDを取得して、既存のテーブルに挿入するすべてのレコードに割り当てます。

ユーザーが特定の時刻にアップロードしたすべてのレコードを要求すると、一致するセッションIDを見つけるためにUploadSessionテーブルを照会し、そのセッションIDに一致するすべてのレコードを既存のテーブルに照会します。

関連する問題