これが私のGeneralFunctionsです:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
/// <summary>
/// Summary description for GeneralFunctions
/// </summary>
public class GeneralFunctions
{
public GeneralFunctions ()
{
//
// TODO: Add constructor logic here
//
}
public static DataTable GetData ( string query )
{
SqlDataAdapter dataAdapter;
DataTable table;
try
{
dataAdapter = new SqlDataAdapter( query, GetConnectionString() );
table = new DataTable();
dataAdapter.Fill( table );
return table;
}
catch ( Exception ex )
{
}
finally
{
dataAdapter = null;
table = null;
}
return table;
}
private static string GetConnectionString ()
{
string connectionString = ConfigurationManager.ConnectionStrings[ "CAPortalConnectionString" ].ConnectionString;
return connectionString;
}
public static int? AuthenticateLogin ( string username, string password )
{
using ( var conn = new SqlConnection( GetConnectionString() ) )
using ( var cmd = conn.CreateCommand() )
{
conn.Open();
cmd.CommandText =
@"SELECT
DistID
FROM
Distributor
WHERE
Username = @username
AND
Password = @password";
cmd.Parameters.AddWithValue( "@username", username );
cmd.Parameters.AddWithValue( "@password", password );
using ( var reader = cmd.ExecuteReader() )
{
if ( !reader.Read() )
{
// no results found
return null;
}
return reader.GetInt32( reader.GetOrdinal( "DistID" ) );
}
}
}
public static string GetDistInfo ( int distID )
{
using ( var conn = new SqlConnection( GetConnectionString() ) )
using ( var cmd = conn.CreateCommand() )
{
conn.Open();
cmd.CommandText =
@"SELECT
FName + ' ' + LName AS Name
FROM
Distributor
WHERE
DistID = @distid";
cmd.Parameters.AddWithValue( "@distid", distID );
using ( var reader = cmd.ExecuteReader() )
{
return reader.GetString( reader.GetOrdinal( "Name" ) );
}
}
}
}
これが私のログインページです:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class index : System.Web.UI.Page
{
protected void Page_Load ( object sender, EventArgs e )
{
}
protected void but_login_Click ( object sender, EventArgs e )
{
if ( username_id.Text != "" || password.Text != "" )
{
// Verify the username and password match the database
var distId = GeneralFunctions.AuthenticateLogin( username_id.Text, password.Text );
if ( distId != null )
{
// User is authenticated
var name = GeneralFunctions.GetDistInfo( (int)distId );
Session[ "DistName" ] = name;
Session[ "DistID" ] = distId;
Response.Redirect( "dashboard.aspx", false );
}
else
{
// provide error label here username and password do not match
authentFailed.Text = "Username / Password did not match our records";
}
}
else
{
// Username or Password blank error lable
authentFailed.Text = "Please Input Username / Password";
}
}
}
GetDistInfoメソッドを追加する前は、正常に機能し、ユーザーにログインしていました。次に、Session変数とGetDistInfoメソッドを追加しようとしました。AuthenticateLoginから返されたDistIDをGetDistInfoメソッドに渡します。次のエラーでエラーになります。
例外の詳細:System.InvalidOperationException:データが存在しない場合の読み取りの試行が無効です。
Source Error:
Line 95: using ( var reader = cmd.ExecuteReader() )
Line 96: {
Line 97: return reader.GetString( reader.GetOrdinal( "Name" ) );
Line 98: }
Line 99: }
Source File: c:\inetpub\wwwroot\Base\ClientAccessPortal\App_Code\GeneralFunctions.cs Line: 97
データベースに対してSQLを実行すると、クライアント名が正しくプルバックされます。なぜコード内でそれが行われないのかわかりません。私が欠けているものを見ることができる人はいますか?