こんばんわ。
現在、クライアントの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
No.4ベストアンサー
- 回答日時:
ASPと違ってvbファイル内にHTMLコードを直書きしてもページには反映されません
# やってやれないことは無いのですが ...
適切なページへ遷移する方法を考えたほうが良いように思います
もしテスト的にやりたいのであれば
Loadイベントで判断だけしてフラグをセットします
LoadComplateイベントでフラグを判断材料にしてResponse.Writeを使ってHTMLを吐き出すとか
ログインのコントロールならツールボックスの中の『ログイン』グループにあるコントロールを使うことをお勧めします
Framsetは ASP.NETと相性がよくありません
パネルコントロールなどを使ってフレーム分けしたほうが良いように思います
.NET Framework SDKの『QuickStartチュートリアル』をインストールして基本的な使い方を学習しましょう
>Framsetは ASP.NETと相性がよくありません
そうなんですか?
パネルコントロールが分からないのですが調べてみます!
>.NET Framework SDKの『QuickStartチュートリアル』をインストール>>して基本的な使い方を学習しましょう
もう1度勉強し直します。
ご教示いただきましてありがとうございました☆
No.3
- 回答日時:
回避出来ると思いますよ
ちょっと間違ってましたけど …
正解は
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
No.2
- 回答日時:
波線が表示されているのであれば参照設定を確認してみましょう
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ファイルの先頭付近に記述すれば回避できるのでしょうか?
ご教示宜しくお願い致します。
No.1
- 回答日時:
クライアントの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個所に波線が表示されるので気になりました。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでActiveDirectoryのユーザ...
-
Excelで勤怠管理をしたいです。...
-
VB.NETで DataRow()を利用して...
-
imgctl.dllを使って読み込んだ...
-
VBA リストボックス複数選択か...
-
VBA:小数点以下の数字を取得で...
-
自動的に高さ指定していないt...
-
エクセルVBAで複数選択できるよ...
-
DataGridView 複数選択で行番...
-
asp.netでtextboxの値を取得
-
IFRAME内のURLを取得したです。
-
ListView 項目の選択/選択解除...
-
Flexgridで選択行の列の値を取...
-
GetLongPathName関数について
-
整数の桁数が取得できません
-
Google Apps Script で、Web上...
-
利用者側のMACアドレスを取得し...
-
フォルダ一覧取得の設計について
-
リクエストからArrayListのデー...
-
ListViewで複数選択された項目...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでActiveDirectoryのユーザ...
-
VB.NETで DataRow()を利用して...
-
VBA:小数点以下の数字を取得で...
-
ListView 項目の選択/選択解除...
-
like演算子内に変数って使えな...
-
count(*)で取得した値をJAVAの...
-
利用者側のMACアドレスを取得し...
-
データ数をカウントしたいのですが
-
JavaScriptでWindowsログオンID...
-
ListViewで複数選択された項目...
-
Flexgridで選択行の列の値を取...
-
エクセルVBAで複数選択できるよ...
-
VBA リストボックス複数選択か...
-
getParameter と getAttribut...
-
Excel VBA でログインしてい...
-
VBScriptで数値にコンマを付け...
-
Spreadの選択行の取得について
-
コンボボックスの表示は最大何行?
-
コンボボックス表示文字列を取...
-
VB .netにて現在時刻+1時間後...
おすすめ情報