【发布时间】:2015-01-10 14:51:23
【问题描述】:
这就是当我需要在我的数据库中创建用户时,你会看到它出现运行时错误,并且它仅在我单击按钮时出现。
只有当我点击页面上的按钮时才会出现问题。
这里有来自 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" />
问题是它出现在这里输入这个:
“/”应用程序中的服务器错误。
运行时错误
描述:服务器上出现应用程序错误。目前的 此应用程序的自定义错误设置阻止了 远程查看应用程序错误(出于安全原因)。 但是,它可以被本地服务器上运行的浏览器查看 机器。
详细信息:启用此特定错误消息的详细信息 可在远程机器上查看,请在其中创建标签 位于根目录下的“web.config”配置文件 当前的网络应用程序。这个标签应该有它的 “mode”属性设置为“Off”。
<configuration> <system.web> <customErrors mode="Off"/> </system.web> </configuration>注意:您看到的当前错误页面可以替换为 通过修改“defaultRedirect”属性来自定义错误页面 应用程序的配置标签指向一个自定义 错误页面网址。
<configuration>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
</system.web>
</configuration>
在我的 web.config 中看起来像这样:
<system.web>
<compilation targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<globalization uiCulture="en-US" />
<!--<globalization uiCulture="da" culture="da-DK" />-->
</system.web>
EIDT 更新
protected void ButtonOpretbruger_Click(object sender, EventArgs e)
{
string fejl = "Hov Hov, Du skal læse vore betingelser";
if (CheckBoxBetingelser.Checked)
{
LabelError.Visible = false;
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
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);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
LabelErrorBesked.Text = "Hov hov, denne her email er optaget " + brugernavn;
}
else
{
conn.Close();
SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
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);
conn1.Open();
cmd1.ExecuteNonQuery();
conn1.Close();
Response.Redirect("login.aspx");
}
}
else
{
LabelError.Text = fejl;
}
}
错误是:变量名“@brugernavn”已被声明。变量名称在查询批处理或存储过程中必须是唯一的。 必须声明标量变量“@adgangskode”。
【问题讨论】:
-
从服务器控制台获取页面,或设置
mode=Off以获取完整的错误消息。把它放在这里,我们会看到。 -
@PatrickHofman 我在哪里添加它??我应该把它写到 web.config 中吗?我是 Asp.net 和 C# 的新手
-
请。在错误消息中添加 XML 配置部分。
-
错误是 变量名“@brugernavn”已经被声明。变量名称在查询批处理或存储过程中必须是唯一的。必须声明标量变量“@adgangskode”。
-
@PatrickHofman I 表示服务器上或以后没有 XML 文件。