複数のレコードを含む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();
}
}
}
}
}
}
にトランザクションIDを与え、データベースに書き込みます。 GUID、日時スタンプ、任意の数値/文字列、任意のものを指定できます。基本的にはレコードをある値でグループ化するだけです。 – DrewJordan
@DrewJordanに追加する - IDをビューに書き込むか、urlに追加してIDをMVCアクションのパラメータとして受け取る必要があります。 –