Я слишком долго беспокоился об этой проблеме, однако, поскольку у меня не было никаких окончательных ответов, я попытаюсь изложить ситуацию еще раз, более четко.
У меня есть вопросник, который позволяетадминистраторы могут добавлять разные категории и разные вопросы для каждой категории, поэтому на вставках для каждой категории я не могу жестко задавать параметры, поскольку не знаю, на сколько вопросов ответит пользователь.
Сейчас у меня есть SP, которыйвставляет (или обновляет) одну строку;
CREATE PROCEDURE [dbo].[insertResults]
@userId nvarchar(10),
@groupId INT ,
@questionId INT,
@answer INT
AS
BEGIN
SELECT * FROM answers
WHERE userId = @userId AND questionId = @questionId
IF @@ROWCOUNT=0
INSERT INTO answers
( userId,
groupId,
questionId,
answer
)
VALUES (
@userId,
@groupId ,
@questionId,
@answer
)
ELSE
UPDATE answers
SET answer = @answer
WHERE userId = @userId AND questionId = @questionId
END
, затем в C # я перебираю все вопросы;
foreach (GridViewRow gvr in GridView1.Rows)
{
var rb = gvr.FindControl("answers_list") as RadioButtonList;
var quest = rb.SelectedValue;
if (quest == "")
{
quest = "0";
}
int questionId = Convert.ToInt32(GridView1.DataKeys[gvr.RowIndex].Values[0].ToString());
int groupId = Convert.ToInt32(GridView1.DataKeys[gvr.RowIndex].Values[1].ToString());
int question = Convert.ToInt32(quest);
var objDB01 = new dbconn();
const string strSQL = "insertResults";
objDB01.objCommand.Parameters.AddWithValue("@userId", logonName);
objDB01.objCommand.Parameters.AddWithValue("@groupId", groupId);
objDB01.objCommand.Parameters.AddWithValue("@questionId", questionId);
objDB01.objCommand.Parameters.AddWithValue("@answer", question);
try
{
objDB01.GetNonQuery(strSQL);
}
finally
{
objDB01.Dispose();
}
}
Я спросил свою собственную серверную команду, открывать и закрывать БД такмного раз плохое кодирование (иногда может быть более 100 человек, отвечающих более чем на 100 вопросов одновременно), но я не могу получить ответ.Я спросил здесь, есть ли более эффективное решение или использование LINQ в этом сценарии может улучшить производительность - но я не могу получить ответ.
Возможно, у меня нет знаний, но я пытаюсь научитьсяпрограммировать элегантно, и ваша помощь будет очень признательна!