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

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

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

1581閲覧

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

ky_46

総合スコア92

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2019/03/12 15:03

編集2019/03/13 01:46

前提・実現したいこと

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からデータを復元すると、相手先と同じように稼働するのが確認できています。

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

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

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

該当のソースコード

aspx

1<h3>ユーザー</h3> 2<asp:Repeater ID="UsersRep" runat="server"> 3<HeaderTemplate> 4<table border="1"> 5<tr><th>氏名</th><th>ログイン名</th><th>役割</th></tr> 6</HeaderTemplate> 7<ItemTemplate> 8<tr><td><%# Eval("DisplayName")%></td><td><%# Eval("Name") %></td><td><%# ProdDoc.GetRoleName((int)Eval("Role")) %></td></tr> 9</ItemTemplate> 10<FooterTemplate> 11</table> 12</FooterTemplate> 13</asp:Repeater> 14</body> 15</html>

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

aspx.cs

1public partial class LoginPage : System.Web.UI.Page 2{ 3 protected void Page_Load(object sender, EventArgs e) 4 { 5 Seed = DBObj.GetSeed("User") as User; 6 7 if (Session.IsNewSession) 8 Seed = DBObj.GetSeed("User") as User; 9 10 if ( IsPostBack ) return; 11 12 string loginName = Cookie.GetLoginName(this); 13 if ( loginName != null ) 14 { 15 this.LoginNameTB.Text = loginName; 16 StoreLoginNameChk.Checked = true; 17 } 18 else 19 { 20 StoreLoginNameChk.Checked = false; 21 } 22 IList<DBObj> users = Seed.LoadList("Role"); 23 UsersRep.DataSource = users; 24 UsersRep.DataBind(); 25 }

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

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

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/03/12 21:20

DBObj はどのようになっているのでしょうか。
退会済みユーザー

退会済みユーザー

2019/03/12 22:05

DB は何ですか? SQL Server とかではなくて、独自の何かのような気がしますが・・・
ky_46

2019/03/13 00:48

順番が前後して申し訳ありません。 SurferOnWww様 修正依頼、ありがとうございます。 DBは、SQLServerです。ソースとbakファイルを貰った(相手会社の許可は得ています)のでbakを復元しましたが、特に異常なく展開できました。 また、仮想のWISAサーバーを用意して、相手会社のサーバー通りにaspxのファイルをフォルダ配置すると、まったく同じ表示がされるので、プログラム的にはSQLserverを参照しているのは間違いないと思います。
m.ts10806

2019/03/13 00:49

「質問への追記・修正の依頼」の場ですので、質問本文に加筆・修正してお返しください。
ky_46

2019/03/13 00:56 編集

mts10806様 修正依頼、ありがとうございます。 申し訳ないです。DBObjというのは初めてですので、良くわかりません。ググって調べてみますので、少しお時間ください。 ただ、ざっと調べた限りでは情報が少ないようです。 Default.aspx.cs の Seed = DBObj.GetSeed("User") as User; の部分の事だと思うのですが、例えば別のファイルで定義するとかでしょうか? とんちんかんな事を言っているようでしたら、ご指摘いただけると助かります。
m.ts10806

2019/03/13 00:56

コード内で定義されているオブジェクトの話なのでWeb検索しても出てこないと思います。 DBObj という変数(中身はたぶんオブジェクトですが)がどこで定義されてどこからきているのか、をプログラム内から探してみてください。 なんとなくですが、モデルとしてDB情報を扱うクラスのような気がします。 しかしながら現在提示されている情報からは確実なことは分かりませんし、おそらくコード量も相当でしょうから質問内には入りきらないものと思います。 ただ、解決に近づきはしそうに思います。
ky_46

2019/03/13 01:48

mts10806様 ありがとうございます。 質問に追記させていただきましたが、DBObj をソースで追いかけてみて気づきましたが、例えばデータベースにuserac1というテーブルがあり、Default.aspxをブラウザから呼ぶと、そのuserac1のリストが表示されているのに、aspxやaspx.csのフォルダで全文検索してもuserac1がヒットしないというのは、ASP.NETの場合、テキストで読める以外になにかデータベース定義ファイルが存在するのでしょうか?
m.ts10806

2019/03/13 01:50

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

2019/03/13 01:53

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

2019/03/13 03:04

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

回答1

0

ベストアンサー

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 01:53

編集2019/03/13 02:03
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ky_46

2019/03/13 02:15

SurferOnWww 様 ご回答ありがとうございます。 > (1) Web サイトプロジェクトであれば App_Code フォルダ。 App_Code というフォルダはありますが、中身は空です。 > (4) 以上のどこにも見つからなければ、ソースは提供されてなくて、コンパイル済みの .dll だけが提供され、bin フォルダに配置されているかもしれません。 bin というフォルダはあり、.dll .pdb .xml の拡張子をもつ同名ファイルが5種類ほどあります。 私もVB.NETでウィンドウアプリは多少やった事がありますが、現在、入手出来るファイルの中には.slnをもつファイルが無く、それらしい部分もないため、プロジェクトファイルは倒産した会社がもったまま消えてしまったのでしょう。 .pdb というファイルが開けられないか、googleで調べてみます。
退会済みユーザー

退会済みユーザー

2019/03/13 02:37

> .pdb というファイルが開けられないか、googleで調べてみます。 それはデバッグに使うファイルなので開いて見ても何の情報も得られないと思います。 DBObj や Seed の定義がどの .dll にあるか、.dll の名前である程度推測できないですか? .dll が分かって、そのソースがないことが確認できれば、諦めざるを得ないという結論になって決着がつくのではないですか?
退会済みユーザー

退会済みユーザー

2019/03/13 02:49

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

2019/03/13 03:52

SurferOnWww 様 ご回答ありがとうございます。 using [binにあるファイル名]; が.csファイルに多数ありますので、ご指摘の通り、.dll を読み込んでいると思われます。 ソースファイルがないと、このdllの中身がなにをしているのか判らないという事は、プロジェクトファイルが倒産した会社がもったまま消えてしまい、永遠に入手不可な以上、どうすることもできないという事でしょう。 多少、PHPを触った事があるので、動いているソースファイルがあれば、どんな問い合わせをして結果を表示しているのか判るだろうと思ったのが甘かったようです。 完全にゼロからのやり直しになるので、費用を心配していたのですが、「残念だけど諦めて、ゼロから見積してもらって」と伝える事にします。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問