Как обрабатывать исключения с SqlDataSource

2

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

Если я получу ошибку, я хочу, чтобы мой текст lblMessage был "Нет соединения".

Edit

Мой 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>

My Connection прямо под моим 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";  

   }

}

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

Почему?

Теги:
datagridview
sqldatasource

5 ответов

6

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

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

Извините, но вам придется иметь код в коде!

Edit

Посмотрев на свой код, я не думаю, что вы когда-либо связывали свой 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;
    }
}
  • 0
    Это даже не входит в обработчик, когда я ставлю точку торможения там.
  • 0
    Вы подключили обработчик событий при загрузке страницы или инициализации: просто введите «GridView1.Selected + =», а затем дважды нажмите вкладку. Просто!
Показать ещё 13 комментариев
1

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

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

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

0
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

Создайте обработчик событий для выбранного события 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

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

  • 0
    Какой код я должен разместить в моем выбранном событии моего источника SQLDataSource? Я даже не могу поставить точку останова в этом!
  • 0
    См. Msdn.microsoft.com/en-us/library/… .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню