プロが教えるわが家の防犯対策術!

こんばんわ。
現在、クライアントのIPアドレスを取得してSQLServerテーブルでログイン管理をするWebを作成したいと思っております。

ずっと調べていたのですが分からず、実はまだASP.NET自体あまり理解できておりません。書籍などで勉強してから投稿しろ!と思われるかもしれませんが時間がなく困っています。
どうかご教示を宜しくお願い致します。

わかる範囲で.vbにコードを書いてみましたがIPアドレスを取得してSQL Serverに接続後にIF文でエラーメッセージとメインページ表示を分岐したいのですが分らないのです。。。


Partial Class INDEX
Inherits System.Web.UI.Page
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

'ページを初期化するユーザーコードをここに挿入します。
If Not IsPostBack Then

'---------IPアドレス取得---------------
Dim strHost As String
Dim ip As System.Net.IPHostEntry
Dim ipAddr As System.Net.IPAddress

'ホスト名を取得
strHost = System.Net.Dns.GetHostName()

'IPリストを取得
ip = System.Net.Dns.GetHostByName(strHost)

'IPリストの最初を取得
ipAddr = ip.AddressList(0)


'---------SQL接続---------------
Dim cn As SqlConnection = New SqlConnection("Server=servername;database=data;UID=id;PWD=pass")
Dim cmd As SqlCommand = New SqlCommand("SELECT * FROM IPAdd WHERE IP='" & ipAddr & "' AND Authority1='True'")

cn.Open()
Dim reader As SqlDataReader = cmd.ExecuteReader()
DemoGrid.DataSource = reader

DataBind()
reader.Close()
cn.Close()

End If
End Sub
End Class

A 回答 (4件)

ASPと違ってvbファイル内にHTMLコードを直書きしてもページには反映されません


# やってやれないことは無いのですが ...
適切なページへ遷移する方法を考えたほうが良いように思います

もしテスト的にやりたいのであれば
Loadイベントで判断だけしてフラグをセットします
LoadComplateイベントでフラグを判断材料にしてResponse.Writeを使ってHTMLを吐き出すとか

ログインのコントロールならツールボックスの中の『ログイン』グループにあるコントロールを使うことをお勧めします

Framsetは ASP.NETと相性がよくありません
パネルコントロールなどを使ってフレーム分けしたほうが良いように思います

.NET Framework SDKの『QuickStartチュートリアル』をインストールして基本的な使い方を学習しましょう
    • good
    • 0
この回答へのお礼

>Framsetは ASP.NETと相性がよくありません
そうなんですか?
パネルコントロールが分からないのですが調べてみます!

>.NET Framework SDKの『QuickStartチュートリアル』をインストール>>して基本的な使い方を学習しましょう
もう1度勉強し直します。

ご教示いただきましてありがとうございました☆

お礼日時:2007/09/29 14:35

回避出来ると思いますよ



ちょっと間違ってましたけど …
正解は
Imports System.Data.SqlClient
でした DataとSqlClientの間に『.』が必要でした

エラー等はまず自分で調べるといった姿勢が必要ですよ
MicrosoftのMSDNライブラリーーなどで …

参考URL:http://msdn2.microsoft.com/ja-jp/library/default …

この回答への補足

ありがとうございます!

>エラー等はまず自分で調べるといった姿勢が必要ですよ
おっしゃる通りです。すみません。

今回、ご教示頂いたアドバイスを元に自分なりに投稿通りのコードを作ってみましたので見て頂けますでしょうか?

HTML部分の表示はvb内では使えないのでしょうか?
また、おかしいとお気づきの部分がありましたらご指導願います。

本当に何度も申し訳ございませんが何卒、宜しくお願い致します。

-------------------ソース---------------------

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.VisualBasic
Imports System.Text
Partial Class INDEX
Inherits System.Web.UI.Page
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

Run()

End Sub

Public Sub Run()

'------------- IPアドレス取得 --------------
Dim ipAddr As String

ipAddr = Request.UserHostAddress

'------------- SQL Server Connection --------------
Dim myDataReader As SqlDataReader
Dim mySqlConnection As SqlConnection
Dim mySqlCommand As SqlCommand

mySqlConnection = New SqlConnection("Server=SQL;database=Web;UID=id;PWD=pass")
mySqlCommand = New SqlCommand("SELECT * FROM IPAdd WHERE IPAddress='" & ipAddr & "' AND Authority1='True'")

mySqlConnection.Open()
myDataReader = mySqlCommand.ExecuteReader(CommandBehavior.CloseConnection)

Do While (myDataReader.Read())

Loop

If Not (myDataReader Is Nothing) Then
<CENTER>
<h2>この端末からは閲覧できません。</h2>

Else

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>メイン</TITLE>
</HEAD>
<FRAMESET rows="97,*" border="0" frameborder="0">
<FRAME src="Title.html" name="ue" scrolling="no" />
<FRAMESET cols="50%,*" border="0" frameborder="0">
<FRAME src="Left.html" name="hidari" />
<FRAME src="Right.html" name="migi" />
</frameset>
</body>
</html>

End If

myDataReader.Close()
mySqlConnection.Close()

End Sub
End Class

補足日時:2007/09/27 14:41
    • good
    • 0

波線が表示されているのであれば参照設定を確認してみましょう



Systemからの完全修飾名で記述してOKなら Importsステートメントを追加することで回避が可能です

SQL関連なら
Imports System.DataSqlClient
をVBファイルの先頭付近に記述してみましょう

IDEの 表示 > エラー一覧 などでエラーになっている箇所の詳細を確認できると思いますよ
EEは使ってないので この機能が無いかもしれませんが …

この回答への補足

ありがとうございます。
波線のアプリケーションを実行するとコンパイルエラーができました。

'/webap' アプリケーションでサーバー エラーが発生しました。
--------------------------------------------------------------------------------

コンパイル エラー
説明: この要求を送信するために必要なリソースをコンパイル中に、エラーが発生しました。以下のエラーの詳細を確認して、ソース コードを修正してください。

コンパイル エラー メッセージ: BC30002: 型 'SqlConnection' が定義されていません。

ソース エラー:



行 14: 'sqlConnectionオブジェクトを作成します。
行 15: '使用環境に応じて接続文字列を変更します。
行 16: Dim cn As SqlConnection = New SqlConnection("Server=servername;database=data;UID=id;PWD=pass")
行 17: Dim cmd As SqlCommand = New SqlCommand("SELECT * FROM IPAdd WHERE IP='" & ipAddr & "' AND Authority1='True'")
行 18:


ソース ファイル: \\server\web\test\web\webap\INDEX.aspx.vb 行: 16

--------------------------------------------------------------------------------
バージョン情報: Microsoft .NET Framework バージョン:2.0.50727.42; ASP.NET バージョン:2.0.50727.210


です。
Imports System.DataSqlClient
をVBファイルの先頭付近に記述すれば回避できるのでしょうか?

ご教示宜しくお願い致します。

補足日時:2007/09/25 14:06
    • good
    • 0

クライアントのIPアドレスの取得には HttpRequestのUserHostAddressを使ったほうが良いと思いますよ


Dns.GetHostNameではWebサーバーのIPが取得されるだけだと思います

dim ipAddr as String
ipAddr = Request.UserHostAddress

といった具合です

この回答への補足

redfox63さん

ありがとうございます!
変更してみます☆
SQL Serverの接続コードは正しいのでしょうか?

WebDeveloperでは
Dim cn As SqlConnection = New SqlConnection・・・
Dim cmd As SqlCommand = New SqlCommand・・・

2個所に波線が表示されるので気になりました。
よろしくお願い致します。

補足日時:2007/09/24 13:52
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!