Как обрабатывать исключения с SqlDataSource - PullRequest
2 голосов
/ 01 апреля 2009

У меня есть SqlDataSource, который предоставляет данные для моего GridView. Это все, что я использую в своей форме, поэтому у меня нет кода вообще. Но где-то мне нужен блок TRY CATCH на тот случай, если мое соединение потеряно. Какой код я должен разместить где?

Если я получаю сообщение об ошибке, я хочу, чтобы текст lblMessage был «Нет соединения».

Редактировать

Мой GridView в моем Machine.aspx

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" 
    Height="209px" PageSize="7" Width="331px" AllowSorting="True" 
                DataSourceID="SqlDataSource1">
    <Columns>
        <asp:BoundField DataField="Total" HeaderText="Total" ReadOnly="True" 
            SortExpression="Total" DataFormatString="{0:R#,###,###}" >
            <HeaderStyle HorizontalAlign="Left" />
        </asp:BoundField>
        <asp:BoundField DataField="b134_rmcid" HeaderText="Machine"  ReadOnly="True" 
            SortExpression="b134_rmcid" >
            <HeaderStyle HorizontalAlign="Left" />
        </asp:BoundField>
        <asp:BoundField DataField="b134_recdate" DataFormatString="{0:d/MM/yyyy}" 
            HeaderText="Date" ReadOnly="True" SortExpression="b134_recdate" >
            <HeaderStyle HorizontalAlign="Left" />
        </asp:BoundField>
    </Columns>
</asp:GridView>

Мое соединение прямо под моим Gridview в моем Machine.aspx

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ODBC_ConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:ODBC_ConnectionString.ProviderName %>" 

    SelectCommand="SELECT SUM(b134_nettpay) AS Total, b134_rmcid, b134_recdate FROM B134HRE" 
    onselected="SqlDataSource1_Selected">

</asp:SqlDataSource>

Мой код в файле с кодом в моем файле Machine.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    lblError.Text = "hello there";
    SqlDataSource1.Selected += new SqlDataSourceStatusEventHandler(SqlDataSource1_Selected);


}


protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{

  if (e.ExceptionHandled)
   {

       lblError.Text = "There is a problem";  

   }

}

И все же для некоторых, когда я помещаю точку останова в выбранное событие, оно даже не доходит до него ???

Почему?

Ответы [ 5 ]

7 голосов
/ 01 апреля 2009

SqlDataSource имеет событие Selected. Добавьте обработчик к этому событию следующим образом и обработайте все ошибки (покажите информативное сообщение и т. Д.) В этом обработчике.

void GridView1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
    if (e.ExceptionHandled)
    {
        //Show error message
    }
}

Извините, но у вас должен быть какой-то код в коде позади!

Редактировать

Глядя на ваш код, я не думаю, что вы когда-либо связываете свой GridView, поэтому ваш SqlDataSource никогда не пытается выбрать данные из вашей базы данных.

В вашем методе Page_Load добавьте следующий код:

    if (!IsPostBack)
    {
        GridView1.DataBind();
    }

Дальнейшее редактирование

Попробуйте изменить "onselected" на "OnSelected" на вашем SqlDataSource и удалите строку, чтобы связать ваш обработчик событий в коде позади.

Я в замешательстве, если это не сработает, так как у вас в принципе есть самый простой пример.

Еще больше отредактировать

Попробуйте вместо этого

void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
    if (e.Exception != null)
    {
        //Show error message
        lblError.Text = "There is a problem"; 

        //Set the exception handled property so it doesn't bubble-up
        e.ExceptionHandled = true;
    }
}
1 голос
/ 02 октября 2014

вам нужно обработать ошибку из кода позади вашего Gridview_ItemInserting или gridview_itemupdating, чтобы сработать до того, как ваш код будет передан в элемент управления sql.

protected void GridView1_ItemInserting(object sender,DetailsViewInsertEventArgs e)
{
if (e.Exception != null)
{
Lblerror.text="error message"
}
}

также для обновления

0 голосов
/ 07 марта 2017
void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
if (e.Exception = null)
{
//bind data to gridview
GridView1.DataBind();
}
else
{
//Show error message    
lblError.Text = "There is a problem";
//Set the exception handled property so it doesn't bubble-up
e.ExceptionHandled = true;
}
}
0 голосов
/ 24 июня 2011

Создайте обработчик события для события Selected объекта SqlDataSource, проверьте, не произошло ли исключение, выполните все необходимые отчеты об ошибках, а затем укажите, что вы уже обработали ошибку.

    mSqlDataSource.Selected += new sqlDataSourceStatusEventHandler(mSqlDataSource_Selected);


    void mSqlDataSource_Selected(object sender, SqlDataSourceStatusEventArgs e)
    {
        if (e.Exception != null)
        {
            mErrorText.Text = e.Exception.Message;
            mErrorText.Visible = true;
            e.ExceptionHandled = true;
        }
    }
0 голосов
/ 01 апреля 2009

Полагаю, вы хотите обработать событие Selected объекта SQLDataSource и проверить аргумент события на наличие исключения.

...