■52557 / inTopicNo.6) |
Re[5]: ADO.NET2.0でparameterが追加できない |
□投稿者/ akira (8回)-(2010/08/14(Sat) 22:16:04)
|
■No52554 (魔界の仮面弁士 さん) に返信
> 2010/08/14(Sat) 19:44:37 編集(投稿者)
>
> ■No52552 (akira さん) に返信
>> ADO.NET2.0のFactoryパターンを利用した記述は、System.Data.SqlClientを利用した記述の
>>2倍の行数になってしまい、手間が増えたと感じますが、コードの汎用性の向上、記述のド
>>キュメント性が向上した事がメリットと理解すれば良いのでしょうか?
> SqlConnection を DbConnection で記述できるようになったというよりは
> IDbConnection を DbConnection で記述できるようになったとみた方が良いかも。
>
> 1.x の IDbConnection 等を使っていた場合、インスタンスの生成時点では
> SqlConnection などの固有型を呼び出さなければなりませんでしたが、
> ファクトリクラスを使えば、それを改善させることができます。
>
> すなわち、DbProviderFactory インスタンスを差し替えるだけで、
> 他のプロバイダーにも対応できる、という意味での汎用性はあります。
> http://msdn.microsoft.com/ja-jp/library/dd278213.aspx
>
> その一方で、SQL Server 専用アプリを作るような場合には、必ずしも
> 無理に System.Data.Common に拘る必要は無いと思います。
> 大抵は、SqlClient をそのまま使った方が便利な事も多いでしょう。
>
> なお、今は SQL Server 専用でも、将来的に複数のプロバイダーに対応させる予定に
> なっているなら、IDbConnection や DbConnection を使っておいた方が良いですが、
> その場合は SQL 構文なども差し替えが利くような設計にしておかないと、
> 汎用化した意味が薄れてしまうかと思います。
魔界の仮面弁士さん、疑問に対して、丁寧なわかり易い解説ありがとうございました。
ADO.NET2.0以降は、DBへの直接接続は何でもかんでもFactoryパターンを利用した記述が
推奨されるわけではないのですね。
目的、用途に合わせて、Factoryパターンで接続するか?System.Data.OleDbで接続するか?
使い分ける必要があるのですね。
早速、System.Data.OleDbで接続出来るか?やってみました。
結果、無事OleDbでも接続でき、フォーム認証が正しく機能しました。
ご指導、重ねがさねありがとうございました。
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="Server">
Sub objBtn_Click(ByVal sender As Object, ByVal e As EventArgs)
' 入力されたユーザーID、パスワードでusrテーブル内のレコードを検索
Dim objdb As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\AccessDB.mdb")
Dim objCom As New OleDbCommand("SELECT * FROM usr WHERE uid=@uid AND passwd=@passwd", objdb)
objCom.Parameters.Add("@uid", OleDbType.VarChar, 50)
objCom.Parameters("@uid").Value = txtUsr.Text
objCom.Parameters.Add("@passwd", OleDbType.VarChar, 50)
objCom.Parameters("@passwd").Value = FormsAuthentication.HashPasswordForStoringInConfigFile(txtPass.Text, "SHA1")
objdb.Open()
Dim objDr As OleDbDataReader = objCom.ExecuteReader()
If objDr.Read() Then
' 検索の結果、該当するレコードが存在した場合、認証は成功
FormsAuthentication.RedirectFromLoginPage(txtUsr.Text, False)
Else
objLbl.Text = "正しいユーザーID、パスワードを入力してください"
End If
objdb.Close()
End Sub
</script>
<html>
<head>
<title>フォーム認証ログイン</title>
</head>
<body>
<form id="Form1" runat="Server">
<center>
<h1>フォーム認証ログイン</h1>
<b>ログインID:</b>
<asp:TextBox id="txtUsr" runat="Server" Columns="12" Font-Size="Medium"
Width="141px" /><br />
<b>パスワード:</b>
<asp:TextBox id="txtPass" runat="Server" Columns="11" TextMode="Password"
Font-Size="Medium" Width="135px" />
<br />
<br />
<asp:Button id="objBtn" runat="Server" Text="ログイン" OnClick="objBtn_Click"
Height="25px" Width="112px" /><br />
<asp:Label id="objLbl" runat="Server" ForeColor="Red" />
</center>
</form>
</body>
</html>
|
解決済み
|