Вопрос по c#, asp.net, sql-server – Вставка списка <> в таблицу SQL Server
У меня есть сущностьReport
значения которого я хочу вставить в таблицу базы данных. Следующие атрибутыReport
необходимо вставить:
reportID - int
RoleID - int
Created_BY = SYSTEM(default)
CURRENT_TIMESTAMP
Теперь проблема со вторым атрибутом. У меня есть отчет сLIST<ROLES>
атрибуты.ROLES
является четко определенной сущностью, которая имеетID
иNAME
. Из этого списка я должен извлечь каждую роль и вставить идентификатор каждой роли в таблиц
Так что мой запрос выглядит следующим образом:
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 #
Полагаю, ты говоришь SQL (язык структурированных запросов) и вы действительно имеете в виду MicrosoftSQL Server (фактический продукт базы данных) вместо этого - верно?
Вы не можете вставить весь список целиком в SQL Server - вам нужно вставить одну строку для каждой записи. Это означает, что вам нужно вызывать оператор 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();
}
скажи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-инъекций.