繁体   English   中英

每次我从C#向SQL Server数据库写入数据时,如何唯一标识一组记录

[英]How to uniquely identify a set of records each time I write to SQL Server database from C#

我在ASP.NET MVC应用程序中有方案,在该方案中,我上载具有多个记录的Excel文件,并在表格/表格中显示它们。

将这些记录插入数据库中,然后根据过程验证它们,然后编辑错误并再次重新验证。

如何将用户上传的记录分组,以使用户在需要重新验证时可以检索这些特定记录?

例:

用户A上传,用户B上传,所有记录都被写入数据库,用户A如何在特定时间之前上传特定记录并上传。

如何在写入SQL Server数据库的ASP.NET MVC应用程序中进行管理。 我在每次上载时都将用户的域名写到数据库中,但是如果用户在特定时间范围内上载两次,该怎么办。

基本上,我要问的是如何管理记录状态并确保用户获得在特定时间上载的记录。 使用C#,ASP.NET MVC和实体框架写入数据库。

请参阅下面的代码,并建议如何使我的应用程序更灵活。

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();
                        }
                   }
               }
           }
       }
}

一种方法是通过向数据库中添加新表UploadSession (例如)。 该表表示用户进行的唯一上载会话。 该表将具有一个ID列(自动生成的身份),一个用户列和一个时间列。 在现有表中,添加一个UploadSessionID列,该列将成为UploadSession ID列的外键。 上载数据时,请在UploadSession表中创建一行,取回生成的ID,并将其分配给您插入到现有表中的所有记录。

当用户请求在特定时间上传的所有记录时,请查询UploadSession表以找到匹配的会话ID,然后在现有表中查询与该会话ID匹配的所有记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM