1

構造内のフラグに基づいて SQL サーバー データベース テーブルを更新するこの C# コードがあります。

public struct stSRK
{ 
    public string Sno;
    public string SClaimID;
    public bool SType;
    public string SText; 
}

構造内のデータは、一度に 5000 ~ 10000 レコードまで処理できます。現在、データベースを更新するために次の C# コードを使用しており、構造体に基づいて「n」回のデータベース呼び出しを行います。同じ struct を使用して一括更新を行う代替手段があると役立ちます。下記の方法をご覧ください

public int UpdateClaims(List<stSRK> _lt, string strClaimType)
{
try
{
    int iCount = 0;
    for (int i = 0; i < _lt.Count; i++)
        {
            if (_lt[i].sType == true)
            {
                if (_lt[i].SText == 'A')
                {
                iCount += Convert.ToInt16(SQL.ExecuteSQL("UPDATE table SET ClaimType = '" + strClaimType + "' WHERE 
                    (Sno = '" + _lt[i].Sno + "' AND ClaimID = '" + _lt[i].SClaimID + "')"));
                }
                else
                {
                iCount += Convert.ToInt16(SQL.ExecuteSQL("UPDATE table SET ClaimType = '" + strClaimType + "' WHERE 
                    (Sno = '" + _lt[i].Sno + "' AND ClaimID = '" + _lt[i].SClaimID + "')"));
                }
            }
            else
            {
                if (_lt[i].SText == 'B')
                {
                iCount += Convert.ToInt16(SQL.ExecuteSQL("UPDATE table SET ClaimType = '" + strClaimType + "' WHERE 
                    (Sno = '" + _lt[i].Sno + "' AND ClaimID = '" + _lt[i].SClaimID + "')"));
                }
                else
                {
                iCount += Convert.ToInt16(SQL.ExecuteSQL("UPDATE table SET ClaimType = '" + strClaimType + "' WHERE 
                    (Sno = '" + _lt[i].Sno + "' AND ClaimID = '" + _lt[i].SClaimID + "')"));
                }
            }
        return iCount;
        }
catch (Exception e)
{
    throw e.Message;
}
4

3 に答える 3

1

私のコード:

 DataTable tblDetails = new DataTable("tblPlanDetail");

        tblDetails.Columns.Add("row1").DataType = typeof(Int32);
        tblDetails.Columns.Add("row2").DataType = typeof(DateTime);
        tblDetails.Columns.Add("row3").DataType = typeof(String); ;
        tblDetails.Columns.Add("row4").DataType = typeof(Int32); ;


        for (int i = 0; i < table.Rows.Count; i++)
        {

            for (int j = 1; j <= DateTime.DaysInMonth(monthYear.Year, monthYear.Month); j++)
            {
                DataRow row = tblDetails.NewRow();

                DateTime DayOfMonth = new DateTime(monthYear.Year, monthYear.Month, j);
                row["row1"] = idPlan;
                row["row2"] = DayOfMonth;
                row["row3"] = table.Rows[i][0];
                row["row4"] = Int32.Parse((string)table.Rows[i][j]);

                tblDetails.Rows.Add(row);
            }
        }

        try
        {

            SqlBulkCopy sqlbulk = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction);
            sqlbulk.ColumnMappings.Add("row1", "row1");
            sqlbulk.ColumnMappings.Add("row2", "row2");
            sqlbulk.ColumnMappings.Add("row3", "row3");
            sqlbulk.ColumnMappings.Add("row4", "row4");

            sqlbulk.DestinationTableName = "tblPlanDescription";
            sqlbulk.BatchSize = 2;
            sqlbulk.WriteToServer(tblDetails);
            transaction.Commit();
        }
        catch (Exception exp)
        {

            transaction.Rollback();
        }
        finally
        {
            transaction.Dispose();
            connection.Close();
        }

それが一括挿入です。一時テーブルに挿入できます。次に、必要なインデックスを作成し、サーバー側で必要なデータを更新する SP を実行できます。

ここを見て

于 2013-11-13T10:16:52.090 に答える
0

一括更新には linq クエリを使用してみてください。これにより、アプリケーションのパフォーマンスが向上します。

ここで一括更新 linq クエリのヘルプを取得できます。

Linqで一括更新/削除クエリを実行するには?

http://msdn.microsoft.com/en-us/library/bb399339.aspx

これがあなたを助けることを願っています。

于 2013-03-11T05:01:45.653 に答える