8

Reportデータベース テーブルに値を挿入したいエンティティがあります。次の属性をReport挿入する必要があります。

reportID - int
RoleID - int
Created_BY = SYSTEM(default)
CURRENT_TIMESTAMP

問題は 2 番目の属性にあります。属性を含むレポートがありLIST<ROLES>ます。とROLESを持つ明確に定義されたエンティティです。このリストからすべてのロールを抽出し、各ロールの ID をテーブルに挿入する必要があります。IDNAME

したがって、私のクエリは現在次のようになります。

INSERT INTO REPORT_MARJORIE_ROLE(REPORT_ID, ROLE_ID, CREATED_BY, CREATED)
VALUES({0}, {1}, 'SYSTEM', CURRENT_TIMESTAMP)

これらの値を解析している C# コードは次のとおりです。

try
{
    StringBuilder _objSQL = new StringBuilder();
    _objSQL.AppendFormat(Queries.Report.ReportQueries.ADD_NEW_ROLES, report.ID, "report.MarjorieRoles.Add(MarjorieRole")); 
    _objDBWriteConnection.ExecuteQuery(_objSQL.ToString());
    _objDBWriteConnection.Commit();
    _IsRolesAdded = true;
}

C#関数からロールを追加する方法を教えてください

4

2 に答える 2

15

SQL (構造化照会言語) と言っていて、実際には Microsoft SQL Server (実際のデータベース製品) を意味していると思いますが、そうです?

リスト全体をまとめて SQL Server に挿入することはできません。エントリごとに 1 つの行を挿入する必要があります。つまり、INSERT ステートメントを複数回呼び出す必要があります。

次のようにします。

// define the INSERT statement using **PARAMETERS**
string insertStmt = "INSERT INTO dbo.REPORT_MARJORIE_ROLE(REPORT_ID, ROLE_ID, CREATED_BY, CREATED) " + 
                    "VALUES(@ReportID, @RoleID, 'SYSTEM', CURRENT_TIMESTAMP)";

// set up connection and command objects in ADO.NET
using(SqlConnection conn = new SqlConnection(-your-connection-string-here))
using(SqlCommand cmd = new SqlCommand(insertStmt, conn)
{
    // define parameters - ReportID is the same for each execution, so set value here
    cmd.Parameters.Add("@ReportID", SqlDbType.Int).Value = YourReportID;
    cmd.Parameters.Add("@RoleID", SqlDbType.Int);

    conn.Open();

    // iterate over all RoleID's and execute the INSERT statement for each of them
    foreach(int roleID in ListOfRoleIDs)
    {
      cmd.Parameters["@RoleID"].Value = roleID;
      cmd.ExecuteNonQuery();
    }

    conn.Close();
}      
于 2012-05-21T07:27:55.857 に答える
0

lstrolesとしましょうLIST<ROLES>

lstroles.ForEach(Role => 
   {            
       /* Your Insert Query like 
        INSERT INTO REPORT_MARJORIE_ROLE(REPORT_ID, ROLE_ID, CREATED_BY, CREATED)
        VALUES(REPORT_ID, Role.ID, {0}, {1}, 'SYSTEM', CURRENT_TIMESTAMP);

       Commit you query*\
   });

個人的な注意: SQL インジェクションに注意してください。

于 2012-05-21T07:25:17.770 に答える