简体   繁体   English

C#和ASP .Net中的异常处理

[英]Exception handling in C# and ASP .Net

I have page and SQL DB behind SQL table do not allowed duplicate names for addresses. 我在SQL表后面有​​页面和SQL DB,不允许地址重复名称。 I connect it to db and trying to implement try catch stamen it is working but fore some reason doesn't want to show error message 我将其连接到db并尝试实现try catch stamen,它正在工作,但是由于某些原因不想显示错误消息

HTML 的HTML

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AdmAddStreet.aspx.cs" Inherits="AdmAddStreet" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        add new address<br />
        <asp:TextBox ID="txbAddress" runat="server" Height="22px" Width="348px"></asp:TextBox>
        <br />
        <br />
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click1" Width="353px" />

        <br />
        <br />
        <asp:Label ID="DisplayMessage" runat="server" style="color: #FF0000" Visible="false" />
        <asp:Label ID="DisplayMessage0" runat="server" style="color: #FF0000" Visible="false" />
        <br />
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TicketsConnectionString %>" DeleteCommand="DELETE FROM [Streets] WHERE [StrID] = @original_StrID" InsertCommand="INSERT INTO [Streets] ([StrName]) VALUES (@StrName)" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [Streets]" UpdateCommand="UPDATE [Streets] SET [StrName] = @StrName WHERE [StrID] = @original_StrID">
            <DeleteParameters>
                <asp:Parameter Name="original_StrID" Type="Int32" />
            </DeleteParameters>
            <InsertParameters>
                <asp:Parameter Name="StrName" Type="String" />
            </InsertParameters>
            <UpdateParameters>
                <asp:Parameter Name="StrName" Type="String" />
                <asp:Parameter Name="original_StrID" Type="Int32" />
            </UpdateParameters>
        </asp:SqlDataSource>
        <br />
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="StrID" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
                <asp:BoundField DataField="StrName" HeaderText="StrName" SortExpression="StrName" />
            </Columns>
        </asp:GridView>

    </div>
    </form>
</body>
</html> 

and .aspx 和.aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;


public partial class AdmAddStreet : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    string connectionString = ConfigurationManager.ConnectionStrings["TicketsConnectionString"].ConnectionString;


    protected void Button1_Click1(object sender, EventArgs e)
    {
        try
        {
            DataSet ds = new DataSet();
            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand("InsertIntoStreets", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@StrName", SqlDbType.NVarChar).Value = txbAddress.Text;
            cmd.Parameters["@StrName"].Value = txbAddress.Text;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();

            DisplayMessage.Text = "Record inserted.";
            DisplayMessage.Visible = true;
            GridView1.DataBind();
            txbAddress.Text = string.Empty;
        }
        catch 
        {
            DisplayMessage0.Text = "Record already exist.";
           DisplayMessage.Visible = true;
        }
    }
}

Can you please point me where is the problem in try...catch, and maybe possible solution for it? 能否请您指出try ... catch中的问题所在,也许是可能的解决方案?

Well you're setting the message but you're never making it visible: 好吧,您正在设置消息,但从未使它可见:

DisplayMessage0.Text = "Record already exist.";
// this is a different field ...
DisplayMessage.Visible = true;

What I believe you want to do is: 我相信您想做的是:

DisplayMessage0.Text = "Record already exist.";
DisplayMessage0.Visible = true;

Note: I understood from your question that the code enters the catch 注意:我从您的问题中了解到代码进入了catch

Try this 尝试这个

catch 
    {
        DisplayMessage0.Text = "Record already exist.";
       DisplayMessage.Visible = true;
    }

to

catch(Exception ex)
    {
        DisplayMessage0.Text = "Record already exist.";
       DisplayMessage0.Visible = true;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM