Asp.net 为什么insert语句生成2行?

Asp.net 为什么insert语句生成2行?,asp.net,sql-server,Asp.net,Sql Server,我不知道为什么,但当我在我的项目中执行insert语句时,它会生成两个缩进行,而不是只生成一行 为什么呢 这是我的代码: if (ListBox.Items.Count != 0) { string username = Session["Session"].ToString(); con = new SqlConnection("Data Source=MICROSOF-58B8A5\\SQL_SERVER_R2;Initial

我不知道为什么,但当我在我的项目中执行insert语句时,它会生成两个缩进行,而不是只生成一行

为什么呢

这是我的代码:

if (ListBox.Items.Count != 0)
        {
            string username = Session["Session"].ToString();

            con = new SqlConnection("Data Source=MICROSOF-58B8A5\\SQL_SERVER_R2;Initial Catalog=Daniel;Integrated Security=True");
            con.Open();

            string knowWhichOne = "SELECT ID FROM Users WHERE Username='" + UserOrGuest.Text + "'";

            SqlCommand comm = new SqlCommand(knowWhichOne, con);
            int userID = (Int32)comm.ExecuteScalar();

            knowWhichOne = "SELECT ClassID FROM Users WHERE Username='" + UserOrGuest.Text + "'";

            comm = new SqlCommand(knowWhichOne, con);
            int classID = (Int32)comm.ExecuteScalar();

            knowWhichOne = "SELECT SchoolID FROM Users WHERE Username='"+UserOrGuest.Text + "'";

            comm = new SqlCommand(knowWhichOne, con);
            int schoolID = (Int32)comm.ExecuteScalar();

            if (RadioWords.Checked == true)
            {
                 game = 1;
            }
            else
            {
                 game = 2;
            }
            string arr = "";
            for (int i = 0; i < ListBox.Items.Count; i++)
            {
                arr += ListBox.Items[i] +",";
            }

            string sqlqueryString = "INSERT INTO HistoryOfGames (GameID, UserID, LengthOfArray, NumberOfErrors, ClassID, SchoolID,Arrayarray) VALUES (@GameID, @UserID, @LengthOfArray, @NumberOfErrors, @ClassID, @SchoolID, @Arrayarray);" + "SELECT SCOPE_IDENTITY()";

            SqlCommand commandquery = new SqlCommand(sqlqueryString, con);

            commandquery.Parameters.AddWithValue("GameID", game);
            commandquery.Parameters.AddWithValue("UserID", userID);
            commandquery.Parameters.AddWithValue("LengthOfArray", HowMany.Text);
            commandquery.Parameters.AddWithValue("NumberOfErrors", 0);
            commandquery.Parameters.AddWithValue("ClassID", classID);
            commandquery.Parameters.AddWithValue("SchoolID", schoolID);
            commandquery.Parameters.AddWithValue("Arrayarray", arr);

            commandquery.ExecuteNonQuery();





            int IdOfRecentHistoryGame = (int)(decimal)commandquery.ExecuteScalar();
            con.Close();

            Response.Redirect("NowPlay.aspx?ID="+ IdOfRecentHistoryGame);

        }
if(ListBox.Items.Count!=0)
{
字符串username=Session[“Session”].ToString();
con=newsqlconnection(“数据源=MICROSOF-58B8A5\\SQL\u SERVER\u R2;初始目录=Daniel;集成安全=True”);
con.Open();
string knowWhichOne=“从Username=”+UserOrGuest.Text+“”的用户中选择ID;
SqlCommand comm=新的SqlCommand(knowWhichOne,con);
int userID=(Int32)comm.ExecuteScalar();
knowWhichOne=“从Username=”+UserOrGuest.Text+“”的用户中选择ClassID;
comm=新的SqlCommand(knowWhichOne,con);
int classID=(Int32)comm.ExecuteScalar();
knowWhichOne=“从用户名=”+UserOrGuest.Text+“”的用户中选择学校ID;
comm=新的SqlCommand(knowWhichOne,con);
int schoolID=(Int32)comm.ExecuteScalar();
if(RadioWords.Checked==true)
{
游戏=1;
}
其他的
{
游戏=2;
}
字符串arr=“”;
对于(int i=0;i
我要检查两件事:

  • 查看此语句的执行次数(尝试设置断点以验证代码仅运行一次)
  • 查看数据库中是否存在可能导致插入额外记录的触发器
    • 我要检查两件事:

      • 查看此语句的执行次数(尝试设置断点以验证代码仅运行一次)
      • 查看数据库中是否存在可能导致插入额外记录的触发器

      您运行了两次,ExecuteNonQuery()和ExecuteScalar()。去掉ExecuteNonQuery()。

      您将运行它两次,ExecuteNonQuery()和ExecuteScalar()。去掉ExecuteNonQuery()。

      您可以这样做

         commandquery.ExecuteNonQuery();
      
      然后马上

         int IdOfRecentHistoryGame = (int)(decimal)commandquery.ExecuteScalar();
      
      你确实执行了两次

      还有,不要忘记检查代码中的sql注入…

      确实如此

         commandquery.ExecuteNonQuery();
      
      然后马上

         int IdOfRecentHistoryGame = (int)(decimal)commandquery.ExecuteScalar();
      
      你确实执行了两次


      还有,别忘了检查代码中是否有sql注入…

      我也有同样的问题,我是这样处理的。虽然不专业,但它可以工作:

      Dim x As Boolean=True

      如果x=True,则

      这里是要插入数据库的代码。

      End If


      x=False

      我也有同样的问题,我是这样处理的。虽然不专业,但它可以工作:

      Dim x As Boolean=True

      如果x=True,则

      这里是要插入数据库的代码。

      End If


      当我调试它时,它只运行一次。什么样的触发因素可能导致这种情况?然而,斯图发现了真正的原因。当我调试它时,它只运行一次。什么样的触发因素可能导致这种情况?然而,斯图发现了真正的原因。无需检查任何其他内容。您是否可以通过一次查询和访问数据库来获取“从用户处选择ID、ClassID、SchoolID…”?您是否可以通过一次查询和访问数据库来获取“从用户处选择ID、ClassID、SchoolID…”?很抱歉,这在很多方面都是错误的。。。1) 除非您是多线程的,否则X仍然是真的2)如果X=真?真正地如果X呢?3)这是如何解决实际问题的?对不起,这在很多方面都是错误的。。。1) 除非您是多线程的,否则X仍然是真的2)如果X=真?真正地如果X呢?3)这如何解决实际问题?