连接字符串没有错误页面?

时间:2015-05-12 08:57:47

标签: c# asp.net

我有这样的gridview和sqldatasource:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:dbConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:dbConnectionString.ProviderName %>" 
    SelectCommand="SELECT * FROM [string]">
</asp:SqlDataSource>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="ID" DataSourceID="SqlDataSource1">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
            ReadOnly="True" SortExpression="ID" />
        <asp:BoundField DataField="HOSTNAME" HeaderText="HOSTNAME" 
            SortExpression="HOSTNAME" />
        <asp:BoundField DataField="DATE" HeaderText="DATE" SortExpression="DATE" />
        <asp:BoundField DataField="INT" HeaderText="INT" SortExpression="INT" />
    </Columns>
</asp:GridView>

但是当连接收到错误时,页面也会出错。

我想在没有错误页面的情况下使用此连接。如果连接有任何问题(不连接,表不存在等),页面必须打开而不会出错。

我可以在代码后面使用带有oledbconnection的try / catch来实现。我如何为sqldatasource做到这一点?

的ConnectionString:

<add name="dbConnectionString" connectionString="Data Source=databaseip:1521/orcl;Persist Security Info=True;User ID=username;Password=pass;Unicode=True" providerName="System.Data.OracleClient" />

2 个答案:

答案 0 :(得分:4)

试试这个。

using System.Data.OleDb.OleDbConnection;添加到文件顶部,然后移除using System.Data.SqlConnection;

在web.config中将此添加到您的提供商名称

providerName="System.Data.OleDb"

如果您不希望oledb更改提供商名称

providerName="System.Data.SqlClient"

答案 1 :(得分:1)

根据我的评论,这是一个基本的例子,你可以根据需要从中扩展。

using (SqlConnection connection = new SqlConnection("Your Connection String"))
{
  string sqlQuery = "Your Query";

    using (SqlCommand cmd = new SqlCommand(sqlQuery, connection))
    {
      using (SqlDataAdapter sda = new SqlDataAdapter())
      {
          connection.Open();
          sda.SelectCommand = cmd;
          DataTable dt = new DataTable();
          sda.Fill(dt);
          GridView1.DataSource = dt;
          GridView1.DataBind();
       }
    }
}

代码使用using块,因此对象将被正确处理。我还建议你有一个单独的函数,它返回DataTable,然后在Page_Load

GridView1.DataSource = FunctionName;
GridView1.DataBind();