C# 单击按钮后出现运行时错误
这就是当我需要在数据库中创建用户时,您将看到它的运行时错误,并且它仅在我单击按钮时显示 问题只是我单击页面上的按钮时出现的唯一问题 这里我们有来自opretbruger.aspx.cs的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
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几乎违反了所有规则。至少他使用了参数:)你确定要将两者分开吗?我