C# 单击按钮后出现运行时错误

C# 单击按钮后出现运行时错误,c#,html,asp.net,C#,Html,Asp.net,这就是当我需要在数据库中创建用户时,您将看到它的运行时错误,并且它仅在我单击按钮时显示 问题只是我单击页面上的按钮时出现的唯一问题 这里我们有来自opretbruger.aspx.cs的c#代码 protected void ButtonOpretbruger_Click(object sender, EventArgs e) { string fejl = "Hov Hov, Du skal læse vore betingelser"; if (CheckBoxBetingel

这就是当我需要在数据库中创建用户时,您将看到它的运行时错误,并且它仅在我单击按钮时显示

问题只是我单击页面上的按钮时出现的唯一问题

这里我们有来自opretbruger.aspx.cs的c#代码

protected void ButtonOpretbruger_Click(object sender, EventArgs e)
{
   string fejl = "Hov Hov, Du skal læse vore betingelser";

   if (CheckBoxBetingelser.Checked)
   {
      LabelError.Visible = false;
      cmd.Connection = conn;

      string brugernavn = System.Globalization.CultureInfo.CurrentUICulture.TextInfo.ToTitleCase(TextBoxBrugernavn.Text);
      cmd.CommandText = "SELECT Id, brugernavn, rank FROM brugere WHERE brugernavn = @brugernavn";
      cmd.Parameters.AddWithValue("@brugernavn", brugernavn);

      conn.Open();
      SqlDataReader reader = cmd.ExecuteReader();

      if (reader.Read())
      {
         LabelErrorBesked.Text = "Hov hov, denne her email er optaget " + brugernavn;
      }
      else
      {
         conn.Close();

         cmd.Connection = conn;

         //ligger noget sikkert på password
         string brugernavn1 = System.Globalization.CultureInfo.CurrentUICulture.TextInfo.ToTitleCase(TextBoxBrugernavn.Text);
         string adgangskode = Hash.getHashSha256(TextBoxAdgangskode.Text);

         string fornavn = TextBoxFornavn.Text;
         string efternavn = TextBoxEfternavn.Text;

         cmd.CommandText = @"INSERT INTO brugere (brugernavn, adgangskode, fornavn, efternavn) 
           VALUES (@brugernavn, @adgangskode, @fornavn, @efternavn);";
         cmd.Parameters.AddWithValue("@brugernavn", brugernavn1);
         cmd.Parameters.AddWithValue("@adgangskode", adgangskode);
         cmd.Parameters.AddWithValue("@fornavn", fornavn);
         cmd.Parameters.AddWithValue("@efternavn", efternavn);

         conn.Open();
         cmd.ExecuteNonQuery();
         conn.Close();

         Response.Redirect("login.aspx");
      }
   }
   else
   {
      LabelError.Text = fejl;
   }
}
这里我们有来自opretbruger.aspx的html

<asp:Button ID="ButtonOpretbruger" runat="server" CssClass="btn pi-btn-base pi-btn-wide pi-weight-600" OnClick="ButtonOpretbruger_Click" ValidationGroup="opretbruger" />
错误为:已声明变量名'@brugernavn'。变量名在查询批处理或存储过程中必须是唯一的。
必须声明标量变量“@adgangskode”。

重复使用同一命令(变量名为
cmd
)两次。这就是错误的原因,因为以前的代码会干扰以后的代码

cmd
变量一分为二。一个用于第一个语句,一个用于第二个语句


这应该是完整的代码:

protected void ButtonOpretbruger_Click(object sender, EventArgs e)
{
   string fejl = "Hov Hov, Du skal læse vore betingelser";

   if (CheckBoxBetingelser.Checked)
   {
      LabelError.Visible = false;

      using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()))
      {
          conn.Open();

          using (SqlCommand cmd = new SqlCommand())
          {
              cmd.Connection = conn;

              string brugernavn = System.Globalization.CultureInfo.CurrentUICulture.TextInfo.ToTitleCase(TextBoxBrugernavn.Text);
              cmd.CommandText = "SELECT Id, brugernavn, rank FROM brugere WHERE brugernavn = @brugernavn";
              cmd.Parameters.AddWithValue("@brugernavn", brugernavn);

              using (SqlDataReader reader = cmd.ExecuteReader())
              {
                  if (reader.Read())
                  {
                     LabelErrorBesked.Text = "Hov hov, denne her email er optaget " + brugernavn;
                  }
                  else
                  {
                     using (SqlCommand cmd1 = new SqlCommand())
                     {
                         cmd1.Connection = conn;

                         string adgangskode = Hash.getHashSha256(TextBoxAdgangskode.Text);

                         string fornavn = TextBoxFornavn.Text;
                         string efternavn = TextBoxEfternavn.Text;

                         cmd1.CommandText = @"INSERT INTO brugere (brugernavn, adgangskode, fornavn, efternavn) 
                           VALUES (@brugernavn, @adgangskode, @fornavn, @efternavn);";
                         cmd1.Parameters.Add("@brugernavn", brugernavn);
                         cmd1.Parameters.Add("@adgangskode", adgangskode);
                         cmd1.Parameters.Add("@fornavn", fornavn);
                         cmd1.Parameters.Add("@efternavn", efternavn);

                         cmd1.ExecuteNonQuery();
                     }

                     Response.Redirect("login.aspx");
                  }
              }
           }
        }

        conn.Close();
      }
   else
   {
      LabelError.Text = fejl;
   }
}

您将重复使用同一命令(变量名为
cmd
)两次。这就是错误的原因,因为以前的代码会干扰以后的代码

cmd
变量一分为二。一个用于第一个语句,一个用于第二个语句


这应该是完整的代码:

protected void ButtonOpretbruger_Click(object sender, EventArgs e)
{
   string fejl = "Hov Hov, Du skal læse vore betingelser";

   if (CheckBoxBetingelser.Checked)
   {
      LabelError.Visible = false;

      using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()))
      {
          conn.Open();

          using (SqlCommand cmd = new SqlCommand())
          {
              cmd.Connection = conn;

              string brugernavn = System.Globalization.CultureInfo.CurrentUICulture.TextInfo.ToTitleCase(TextBoxBrugernavn.Text);
              cmd.CommandText = "SELECT Id, brugernavn, rank FROM brugere WHERE brugernavn = @brugernavn";
              cmd.Parameters.AddWithValue("@brugernavn", brugernavn);

              using (SqlDataReader reader = cmd.ExecuteReader())
              {
                  if (reader.Read())
                  {
                     LabelErrorBesked.Text = "Hov hov, denne her email er optaget " + brugernavn;
                  }
                  else
                  {
                     using (SqlCommand cmd1 = new SqlCommand())
                     {
                         cmd1.Connection = conn;

                         string adgangskode = Hash.getHashSha256(TextBoxAdgangskode.Text);

                         string fornavn = TextBoxFornavn.Text;
                         string efternavn = TextBoxEfternavn.Text;

                         cmd1.CommandText = @"INSERT INTO brugere (brugernavn, adgangskode, fornavn, efternavn) 
                           VALUES (@brugernavn, @adgangskode, @fornavn, @efternavn);";
                         cmd1.Parameters.Add("@brugernavn", brugernavn);
                         cmd1.Parameters.Add("@adgangskode", adgangskode);
                         cmd1.Parameters.Add("@fornavn", fornavn);
                         cmd1.Parameters.Add("@efternavn", efternavn);

                         cmd1.ExecuteNonQuery();
                     }

                     Response.Redirect("login.aspx");
                  }
              }
           }
        }

        conn.Close();
      }
   else
   {
      LabelError.Text = fejl;
   }
}

您将重复使用同一命令(变量名为
cmd
)两次。这就是错误的原因,因为以前的代码会干扰以后的代码

cmd
变量一分为二。一个用于第一个语句,一个用于第二个语句


这应该是完整的代码:

protected void ButtonOpretbruger_Click(object sender, EventArgs e)
{
   string fejl = "Hov Hov, Du skal læse vore betingelser";

   if (CheckBoxBetingelser.Checked)
   {
      LabelError.Visible = false;

      using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()))
      {
          conn.Open();

          using (SqlCommand cmd = new SqlCommand())
          {
              cmd.Connection = conn;

              string brugernavn = System.Globalization.CultureInfo.CurrentUICulture.TextInfo.ToTitleCase(TextBoxBrugernavn.Text);
              cmd.CommandText = "SELECT Id, brugernavn, rank FROM brugere WHERE brugernavn = @brugernavn";
              cmd.Parameters.AddWithValue("@brugernavn", brugernavn);

              using (SqlDataReader reader = cmd.ExecuteReader())
              {
                  if (reader.Read())
                  {
                     LabelErrorBesked.Text = "Hov hov, denne her email er optaget " + brugernavn;
                  }
                  else
                  {
                     using (SqlCommand cmd1 = new SqlCommand())
                     {
                         cmd1.Connection = conn;

                         string adgangskode = Hash.getHashSha256(TextBoxAdgangskode.Text);

                         string fornavn = TextBoxFornavn.Text;
                         string efternavn = TextBoxEfternavn.Text;

                         cmd1.CommandText = @"INSERT INTO brugere (brugernavn, adgangskode, fornavn, efternavn) 
                           VALUES (@brugernavn, @adgangskode, @fornavn, @efternavn);";
                         cmd1.Parameters.Add("@brugernavn", brugernavn);
                         cmd1.Parameters.Add("@adgangskode", adgangskode);
                         cmd1.Parameters.Add("@fornavn", fornavn);
                         cmd1.Parameters.Add("@efternavn", efternavn);

                         cmd1.ExecuteNonQuery();
                     }

                     Response.Redirect("login.aspx");
                  }
              }
           }
        }

        conn.Close();
      }
   else
   {
      LabelError.Text = fejl;
   }
}

您将重复使用同一命令(变量名为
cmd
)两次。这就是错误的原因,因为以前的代码会干扰以后的代码

cmd
变量一分为二。一个用于第一个语句,一个用于第二个语句


这应该是完整的代码:

protected void ButtonOpretbruger_Click(object sender, EventArgs e)
{
   string fejl = "Hov Hov, Du skal læse vore betingelser";

   if (CheckBoxBetingelser.Checked)
   {
      LabelError.Visible = false;

      using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()))
      {
          conn.Open();

          using (SqlCommand cmd = new SqlCommand())
          {
              cmd.Connection = conn;

              string brugernavn = System.Globalization.CultureInfo.CurrentUICulture.TextInfo.ToTitleCase(TextBoxBrugernavn.Text);
              cmd.CommandText = "SELECT Id, brugernavn, rank FROM brugere WHERE brugernavn = @brugernavn";
              cmd.Parameters.AddWithValue("@brugernavn", brugernavn);

              using (SqlDataReader reader = cmd.ExecuteReader())
              {
                  if (reader.Read())
                  {
                     LabelErrorBesked.Text = "Hov hov, denne her email er optaget " + brugernavn;
                  }
                  else
                  {
                     using (SqlCommand cmd1 = new SqlCommand())
                     {
                         cmd1.Connection = conn;

                         string adgangskode = Hash.getHashSha256(TextBoxAdgangskode.Text);

                         string fornavn = TextBoxFornavn.Text;
                         string efternavn = TextBoxEfternavn.Text;

                         cmd1.CommandText = @"INSERT INTO brugere (brugernavn, adgangskode, fornavn, efternavn) 
                           VALUES (@brugernavn, @adgangskode, @fornavn, @efternavn);";
                         cmd1.Parameters.Add("@brugernavn", brugernavn);
                         cmd1.Parameters.Add("@adgangskode", adgangskode);
                         cmd1.Parameters.Add("@fornavn", fornavn);
                         cmd1.Parameters.Add("@efternavn", efternavn);

                         cmd1.ExecuteNonQuery();
                     }

                     Response.Redirect("login.aspx");
                  }
              }
           }
        }

        conn.Close();
      }
   else
   {
      LabelError.Text = fejl;
   }
}

您的问题是cmd对象。该对象被多次使用,并且每次更新同一对象时都会使用。在这种情况下,可能需要添加两次相同的参数

相反,尝试按照以下方式获取命令

Command cmd = conn.CreateCommand();

//现在在这里使用cmd。

您的问题在于cmd对象。该对象被多次使用,并且每次更新同一对象时都会使用。在这种情况下,可能需要添加两次相同的参数

相反,尝试按照以下方式获取命令

Command cmd = conn.CreateCommand();

//现在在这里使用cmd。

您的问题在于cmd对象。该对象被多次使用,并且每次更新同一对象时都会使用。在这种情况下,可能需要添加两次相同的参数

相反,尝试按照以下方式获取命令

Command cmd = conn.CreateCommand();

//现在在这里使用cmd。

您的问题在于cmd对象。该对象被多次使用,并且每次更新同一对象时都会使用。在这种情况下,可能需要添加两次相同的参数

相反,尝试按照以下方式获取命令

Command cmd = conn.CreateCommand();



//现在在这里使用cmd。

从服务器控制台获取页面,或设置
mode=Off
以获取完整的错误消息。把它放在这里,我们会看到的。@Patrickhoffman,我在哪里添加它??,我应该把它写进web.config吗?我是Asp.net&C的新手,是的。在错误消息中添加XML配置部分。错误是变量名“@brugernavn”已经声明。变量名在查询批处理或存储过程中必须是唯一的。必须声明标量变量“@adgangskode”。@PatrickHofman I,以获取服务器上或之后的任何XML文件。从服务器控制台获取页面,或设置
mode=Off
以获取完整的错误消息。把它放在这里,我们会看到的。@Patrickhoffman,我在哪里添加它??,我应该把它写进web.config吗?我是Asp.net&C的新手,是的。在错误消息中添加XML配置部分。错误是变量名“@brugernavn”已经声明。变量名在查询批处理或存储过程中必须是唯一的。必须声明标量变量“@adgangskode”。@PatrickHofman I,以获取服务器上或之后的任何XML文件。从服务器控制台获取页面,或设置
mode=Off
以获取完整的错误消息。把它放在这里,我们会看到的。@Patrickhoffman,我在哪里添加它??,我应该把它写进web.config吗?我是Asp.net&C的新手,是的。在错误消息中添加XML配置部分。错误是变量名“@brugernavn”已经声明。变量名在查询批处理或存储过程中必须是唯一的。必须声明标量变量“@adgangskode”。@PatrickHofman I,以获取服务器上或之后的任何XML文件。从服务器控制台获取页面,或设置
mode=Off
以获取完整的错误消息。把它放在这里,我们会看到的。@Patrickhoffman,我在哪里添加它??,我应该把它写进web.config吗?我是Asp.net&C的新手,是的。在错误消息中添加XML配置部分。错误是变量名“@brugernavn”已经声明。变量名在查询批处理或存储过程中必须是唯一的。必须声明标量变量“@adgangskode”。@PatrickHofman I,以便在服务器上或之后没有XML文件。。。。并开始对IDisPobles使用{}块。确实要停止使用
AddWithValue
:)。我认为OP几乎违反了所有规则。至少他使用了参数:)你确定要将两者分开吗?错误是否完全相同,在相同的位置?@Jesperpersen:对不起,但我想把它保留在这里。你能发布你当前的代码吗?(请更新您的答案)。。。并开始对IDisPobles使用{}块。确实要停止使用
AddWithValue
:)。我认为OP几乎违反了所有规则。至少他使用了参数:)你确定要将两者分开吗?错误是否完全相同,在相同的位置?@Jesperpersen:对不起,但我想把它保留在这里。你能发布你当前的代码吗?(请更新您的答案)。。。并开始对IDisPobles使用{}块。确实要停止使用
AddWithValue
:)。我认为OP几乎违反了所有规则。至少他使用了参数:)你确定要将两者分开吗?我