0

データベースビューから会社固有のデータを取得し、その情報を画面に表示することになっているC#にこの関数があります。この関数の catch ステートメントは、何かが失敗した場合にエラー時にポップアップ メッセージを表示します。データベースに AGENT_NAMES ビューを持たないクライアント サーバーでこのコードを実行すると、関数は次のエラーを表示します:「現時点では接続できません」。代わりに、ビューがデータベースに存在するかどうかを判断し、存在しない場合は適切にエスケープする関数が必要です。どうすればいいですか?

編集: 使用されている DBMS は Microsoft SQL Server です

private string getAgencyInfo()
{
    string agentNo = null;
    string agencyInfo = "";

    try
    {
        agentNo = Session["Variable_AgencyID"].ToString();
    }
    catch
    {
        this.lblPopMsg.Text = "Connection timed out, Please Login";
        this.ModalPopupExtender1.Show();
        return agencyInfo;
    }

    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ARConnectionString"].ToString()))
    {
        try
        {
            cn.Open();
        }
        catch
        {
            clearLabels();
            this.txtZipCode.Visible = false;
            this.lblZipCode.Visible = false;
            this.lblPopMsg.Text = "Unable to make a Connection at this Time";
            this.ModalPopupExtender1.Show();
            this.txtPolicyNo.Focus();
            return agencyInfo;
        }

        try
        {
            string agentData = "SELECT AGENT_NAMES.NAME FROM AGENT_NAMES WHERE AGENT_NAMES.AGENT_NO = @agentNo";

            SqlCommand command = new SqlCommand(agentData, cn);
            command.Parameters.Add(new SqlParameter("agentNo", agentNo));
            SqlDataReader dataReader = command.ExecuteReader();
            DataTable dataTable = new DataTable();

            dataTable.Load(dataReader);
            if (dataTable.Rows.Count != 0)
                agencyInfo = dataTable.Rows[0][0].ToString() + " — Agent #" + agentNo;

            return agencyInfo;
        }
        catch
        {
            clearLabels();
            this.txtZipCode.Visible = false;
            this.lblZipCode.Visible = false;
            this.lblPopMsg.Text = "Unable to make a Connection at this Time";
            this.ModalPopupExtender1.Show();
            this.txtPolicyNo.Focus();
            return agencyInfo;
        }
    }
}
4

3 に答える 3

1

SqlException をキャッチして、特定のエラー番号を確認できます。

    catch (SqlException exSQL)
    {
        // want to check for number 10034 table or view doesn't exist
        if (exSQL.Number == 10034)
        {
          this.lblPopMsg.Text = "view or table doesn't exist.";
        }
   }

すべての数字を確認するには、マスター データベースで SQL クエリを実行します。

SELECT * FROM master.dbo.sysmessages
于 2013-11-01T19:28:51.223 に答える
0

DB スキーマへのクエリを実行して、ビューが存在するかどうかを確認できます。これを確認してくださいhttp://technet.microsoft.com/en-us/library/ms190324.aspx

于 2013-11-01T18:50:34.673 に答える
0

ビューが存在するかどうかを確認する追加のクエリを作成し、その条件を明示的に処理する必要があります。

ビューが存在するかどうかを確認するクエリは次のとおりです。

select * from sys.views where name = 'AGENT_NAMES'

エージェント名を照会するたびにこれを行うわけではありません。そうしないと、データベース呼び出しの回数が 2 倍になります。アプリケーションのロード時に一度だけ実行してください。

于 2013-11-01T20:59:54.163 に答える