質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.79%

ASP.NETでデータベースへの接続部分を探したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,305

score 94

前提・実現したいこと

ASP.NETは殆ど弄った事がなく、WISAサーバーの検証でHELLO WORLDをしたくらいです。

知人の会社で、イントラ用のWEBアプリが動いています。
サーバーの構成はWISAで、Windows Server IIS SQLServer ASP.NETとなっています。
確認しましたが、データははSQLServerにあり、LAN上のWindows7機のWEBブラウザでWEBアプリにより、閲覧、追加、修正、削除ができるようになっています。
サーバーのSQL Serverマネージャーでも確認しましたが、データはこれでまちがいないようです。

WEBアプリの開発元はとうに倒産して設計書も定義書も手元になく、なにがどうなって動いているのか判らないまま、数年来稼働している状態に陥っています。

このままブラックボックスではリプレースも依頼できないと困り果てている様子なので、とりあえずどういう仕組みで動いてるのか調べてみようという事になり、相手先の許可を得た上で、ASPのソースと、データベースのbak(数年前の古いもの)を提供してもらいました。

仮想のWindows Server上で、ASPファイルのフォルダの配置を相手先に合わせ、bakからデータを復元すると、相手先と同じように稼働するのが確認できています。

それでソースを読んでいけば、動作の仕組みが判るのではと思ったのですが、行き詰まってしまいました。

「知りもしないくせに手を出したお前が悪い」

という誹りは甘んじてお受けますが、データベースからどうやってデータを取りだしているのか、なにかヒントを頂けないでしょうか?

該当のソースコード

<h3>ユーザー</h3>
<asp:Repeater ID="UsersRep" runat="server">
<HeaderTemplate>
<table border="1">
<tr><th>氏名</th><th>ログイン名</th><th>役割</th></tr>
</HeaderTemplate>
<ItemTemplate>
<tr><td><%# Eval("DisplayName")%></td><td><%# Eval("Name") %></td><td><%# ProdDoc.GetRoleName((int)Eval("Role")) %></td></tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</body>
</html>

Default.aspxにはこのような記述があって、Repeaterがデータベースとの接続のUsersRepを呼び出していて、Evalの部分がデータがある限り繰り返されるところは理解できたのですが、このUsersRepでの呼び出しがなにかよくわかりません。

public partial class LoginPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Seed = DBObj.GetSeed("User") as User;

        if (Session.IsNewSession)
            Seed = DBObj.GetSeed("User") as User;

        if ( IsPostBack ) return;

        string loginName = Cookie.GetLoginName(this);
        if ( loginName != null )
        {
            this.LoginNameTB.Text = loginName;
            StoreLoginNameChk.Checked = true;
        }
        else
        {
            StoreLoginNameChk.Checked = false;
        }
        IList<DBObj> users = Seed.LoadList("Role");
        UsersRep.DataSource = users;
        UsersRep.DataBind();
    }

Default.aspx.cs にはこのように書かれているため、このUsersRep.DataSourceあたりでデータを取り込んでいるのでは? と想像するのですが、ブラウザで表示したとき、ユーザーとして表示されるユーザー一覧を格納したテーブル名称も出て来ませんし、SQLもありません。

修正依頼で、DBObjについて記述されたファイルを探すうちに気づいたのですが、

例えばデータベースにuserac1というテーブルがあって、データが20行ある場合、Default.aspxをブラウザから呼ぶと、そのuserac1のリスト20行が表示されているのに、全文検索で、aspxやaspx.csのフォルダを「userac1」のテキストで検索しても、ヒットが0件になります。

という事は、少なくともテキストとして閲覧できるプログラムソースの中では何処もuserac1を指示していないのに、実働するとuserac1を読みに行っていますから、ASP.NETでは、テキストで読める以外になにかデータベース定義のバイナリファイルが存在するのでしょうか?

御存知の方がいらっしゃいましたら、ご教示ください。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/03/13 10:50

    コード内直接ではなく設定ファイルに書かれている可能性もあるのでなんとも言えませんね。

    キャンセル

  • m.ts10806

    2019/03/13 10:53

    DB接続などもそうですが、定数的なものや決まった文言、設定をコード内に直接書くことって少ないです。ただ、それもやり方のひとつなので確認されているプロジェクトを作った人次第(さじ加減)とも言えます。
    乱暴に言えば、「要件通り動けばいい」ので、絶対こうじゃなきゃいけないとかはありません

    キャンセル

  • ky_46

    2019/03/13 12:04

    mts10806様
    ありがとうございます。
    となると、プロジェクトファイルが入手出来る可能生がありませんので、手出し出来ないという事になりますね…
    ありがとうございました。

    キャンセル

回答 1

checkベストアンサー

+1

DB は SQL Server で Repeater コントロールに表示しているのはそのデータに間違いないのは確認済みということですね。

ASP.NETでは、別にSQLなどを定義したファイルや、なにか書き方があるのでしょうか?

たぶん、プレゼンテーション層 ⇔ ビジネスロジック層 ⇔ データーベース層の 3 層構造になっていると思います。

SQL Server からデータを取得したり更新したりするコードはビジネスロジック層にあって、DBObj や Seed の定義などもそれに含まれていると思われます。

なので、まずはビジネスロジック層を探すということになると思いますが、ソースコードがありそうな場所で自分が思いつくのは:

(1) Web サイトプロジェクトであれば App_Code フォルダ。

(2) Web アプリケーションプロジェクトには App_Code フォルダはないので、Web アプリのプロジェクトフォルダ下のクラスファイル。

(3) Visual Studio で Web アプリとは同一ソリューションだが別プロジェクトとして作成。以下の画像のような感じです。

イメージ説明

(4) 以上のどこにも見つからなければ、ソースは提供されてなくて、コンパイル済みの .dll だけが提供され、bin フォルダに配置されているかもしれません。 

・・・です。まずそのあたりを探してみてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/13 11:15

    SurferOnWww 様
    ご回答ありがとうございます。

    > (1) Web サイトプロジェクトであれば App_Code フォルダ。

    App_Code というフォルダはありますが、中身は空です。

    > (4) 以上のどこにも見つからなければ、ソースは提供されてなくて、コンパイル済みの .dll だけが提供され、bin フォルダに配置されているかもしれません。
    bin というフォルダはあり、.dll .pdb .xml の拡張子をもつ同名ファイルが5種類ほどあります。

    私もVB.NETでウィンドウアプリは多少やった事がありますが、現在、入手出来るファイルの中には.slnをもつファイルが無く、それらしい部分もないため、プロジェクトファイルは倒産した会社がもったまま消えてしまったのでしょう。
    .pdb というファイルが開けられないか、googleで調べてみます。

    キャンセル

  • 2019/03/13 11:37

    > .pdb というファイルが開けられないか、googleで調べてみます。

    それはデバッグに使うファイルなので開いて見ても何の情報も得られないと思います。

    DBObj や Seed の定義がどの .dll にあるか、.dll の名前である程度推測できないですか? .dll が分かって、そのソースがないことが確認できれば、諦めざるを得ないという結論になって決着がつくのではないですか?

    キャンセル

  • 2019/03/13 11:49

    > 現在、入手出来るファイルの中には.slnをもつファイルが無く

    探すのは拡張子が .cs というファイルです。しらみつぶしに全部の .cs ファイルの中身を見て、それに DBObj や Seed の定義がないかチェックしてください。

    キャンセル

  • 2019/03/13 12:52

    SurferOnWww 様
    ご回答ありがとうございます。

    using [binにあるファイル名];

    が.csファイルに多数ありますので、ご指摘の通り、.dll を読み込んでいると思われます。
    ソースファイルがないと、このdllの中身がなにをしているのか判らないという事は、プロジェクトファイルが倒産した会社がもったまま消えてしまい、永遠に入手不可な以上、どうすることもできないという事でしょう。

    多少、PHPを触った事があるので、動いているソースファイルがあれば、どんな問い合わせをして結果を表示しているのか判るだろうと思ったのが甘かったようです。

    完全にゼロからのやり直しになるので、費用を心配していたのですが、「残念だけど諦めて、ゼロから見積してもらって」と伝える事にします。

    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る