我有问题解答;没有正确或错误的答案,只是“专家,中级,初学者”,其值为3,2,1。用于最有效解决方案的C#或SQL
这些问题被分成不同的小组,即数学,地理等。我已经构建了一个“内容管理系统”,允许管理员为每个组添加组和问题,因此我有一个未知的问题和组的数量。
我试过编写SQL来循环输入,但没有成功。我发现这样做的唯一方法是在C#中,如下所示:
logonName = Session["user"].ToString();
foreach (GridViewRow gvr in GridView1.Rows)
{
var rb = gvr.FindControl("answers_list") as RadioButtonList;
var quest = rb.SelectedValue;
if (quest == "")
{
quest = "0";
}
var questId = GridView1.DataKeys[gvr.RowIndex].Values[0].ToString();
var gpId = GridView1.DataKeys[gvr.RowIndex].Values[1].ToString();
int questionId = Convert.ToInt32(questId);
int groupId = Convert.ToInt32(gpId);
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();
}
}
有没有更高效的方法来做到这一点?这种服务器一旦推出就会给服务器带来什么样的压力,可能有数百个用户同时回答数百个问题?
没有看到您的SQL查询和使用的表,有点难以推测。也许你可以添加更多的细节,然后标记重新打开。 – Kev
如何重新打开问题?我只是问,是否循环遍历上面的代码几十次,每次打开和关闭数据库连接都是糟糕的编程。我对LINQ的评论很感兴趣,因为我没有使用过它,在一个没有LINQ的好处的.Net2直接运行到.Net4的环境中工作。 – Alex
问题是1.你没有告诉我们足够的数据(告诉我们你的表)2.你不告诉我们SQL查询是什么样的3.你不告诉我们有多少行返回和在那个循环中被处理。这就是你需要在任何人有机会回答之前展开的,而不必猜测你所做的事情是否值得优化。当谈到在这里提出问题时,魔鬼会详细介绍。 – Kev