c#或SQL是最有效的解决方案

本文关键字:有效 解决方案 SQL | 更新日期: 2023-09-27 18:06:13

我有一份问卷;没有正确或错误的答案,只有值为3,2,1的"专家,中级,初学者"。

问题被分成不同的组,如数学、地理等。我建立了一个"内容管理系统",允许管理员为每个组添加组和问题,因此我有未知数量的问题和组。

我试了一次又一次地编写SQL来循环输入,但没有成功。我发现这样做的唯一方法是在c#中,如下所示;

logonName = Session["user"].ToString();
foreach (GridViewRow gvr in GridView1.Rows)
{
    var rb = gvr.FindControl("answerswers_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();
    }
}

有更有效的方法吗?这给服务器带来了什么样的压力,因为一旦推出,可能会有数百个用户同时回答数百个问题?

c#或SQL是最有效的解决方案

当你决定在哪里放置操作时,你要考虑哪个层/进程更适合它。

例如,对于数学运算,如果人们试图在SQL/Oracle服务器上做三角函数或繁重的数学函数,我会畏缩。

从上面我可以看到,你有一个巨大的问题列表,你要把它们插入数据库,一次一个。

如果你打算使用LINQ,请完全使用它,看看这个链接:http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/1a2c5ae8-8671-4863-a278-164cc51bd7d2/

使用LINQ进行多次插入,因为这将使你的代码更容易阅读,并将给你一个性能提升。

保持和你原来的相似:

logonName = Session["user"].ToString();
    string strSQL = "insertResults";
    var objDB01 = new dbconn();
    foreach (GridViewRow gvr in GridView1.Rows)
    {
        RadioButtonList rb = gvr.FindControl("answerswers_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);
        objDB01.objCommand.Clear();
        objDB01.objCommand.Parameters.AddWithValue("@userId", logonName);
        objDB01.objCommand.Parameters.AddWithValue("@groupId", groupId);
        objDB01.objCommand.Parameters.AddWithValue("@questionId", questionId);
        objDB01.objCommand.Parameters.AddWithValue("@answer", question);
        objDB01.GetNonQuery(strSQL);
    }
    //CLOSE YOUR CONNECTION if dispose does not directly invoke close.  
    objDB01.Dispose();

编辑:如果您正在寻找性能,并且要执行100次以上的插入,请考虑使用以下方法:http://blog.sqlauthority.com/2007/06/08/sql-server-insert-multiple-records-using-one-insert-statement-use-of-union-all/

在这种情况下,与其以关系格式存储数据,不如将整个问题集存储为BLOB或XML,然后在数据库中来回序列化和反序列化数据。这种方法的缺点是不能从SQL的角度查询数据,但是从数据库读取和写入数据应该只是一个数据库操作。