0

次のコードがあり、送信ボタンがクリックされたときにSQLのストアドプロシージャを呼び出したいと思います。

送信ボタンがクリックされたときに SP を呼び出すコードを配置する必要がある場所を教えてもらえますか?

デフォルト.aspx

  <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Login Form</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table align="center">

<strong>Login Form</strong>

<tr>
<td>
Username:
</td>
<td>
<asp:TextBox ID="txtUserName" runat="server"/>
<asp:RequiredFieldValidator ID="rfvUser" ErrorMessage="Please enter Username" ControlToValidate="txtUserName" runat="server" />
</td>
</tr>
<tr>
<td>
Password:
</td>
<td>
<asp:TextBox ID="txtPWD" runat="server" TextMode="Password"/>
<asp:RequiredFieldValidator ID="rfvPWD" runat="server" ControlToValidate="txtPWD" ErrorMessage="Please enter Password"/>
</td>
</tr>
<tr>
<td>
</td>
<td>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" onclick="btnSubmit_Click" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>

Default.aspx.cs

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data;


public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString);
        con.Open();
        SqlCommand cmd = new SqlCommand("select * from Log_Users where UserName =@username and Password=@password", con);
        cmd.Parameters.AddWithValue("@username", txtUserName.Text);
        cmd.Parameters.AddWithValue("@password", txtPWD.Text);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        if (dt.Rows.Count > 0)
        {
            Response.Redirect("Details.aspx");
        }
        else
        {
            ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('Invalid Username Or Password')</script>");
        }
    }
}

詳細.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Details.aspx.cs" Inherits="Details" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <table align="center">
        <tr>
    <td>
      <asp:Label ID="lblDisplay" runat="server" Text="Welcome to our sample Site" Font-Bold="true"></asp:Label>
    </td>
    </tr>
    </table>

    </div>
    </form>
</body>
</html>

詳細.aspx.cs

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class Details : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
}
4

5 に答える 5

0

以下は、あなたが探している完全なソリューションです。

  1. ストアド プロシージャ:

    [YOURDB] を使用

    行く

    IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'sp_Login') BEGIN DROP Procedure [dbo].[sp_Login] END

    ANSI_NULLS を設定 GO で QUOTED_IDENTIFIER を設定

    /* ファイル名: sp_Login.sql 説明: 作成者: Vinay.T 日付: */

    CREATE プロシージャ [dbo].[sp_Login] ( @Username VarChar(50) ,@UPassword varChar(50) ,@OutRes int output

    ) なので

    開始セット番号オン

    DECLARE @ErrMsg NVARCHAR(510) -- ,@ErrorSeverity INT -- ビジネス エラーの場合は 16 BEGIN

    SET @OutRes = (SELECT count(*) FROM Log_Users WHERE Username = @Username And [Password] = @UPassword)

    エンド ゴート サクセス

    成功: 1 を返します クラッシュ: RAISERROR (@ErrMsg, @ErrorSeverity, 1) WITH NOWAIT END GO GRANT EXEC ON [dbo].[sp_Login] TO PUBLIC

    行く

2: ボタン クリック イベント コード:

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString);
        con.Open();
        SqlCommand cmd = new SqlCommand("sp_Login", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@Username", txtUserName.Text);
        cmd.Parameters.AddWithValue("@UPassword", txtPWD.Text);
        cmd.Parameters.Add("@OutRes", SqlDbType.Int).Direction = ParameterDirection.Output;
        cmd.ExecuteNonQuery();

        int output = (int)cmd.Parameters["@OutRes"].Value;
        if (output == 1)
        {
            Response.Redirect("Details.aspx");
        }
        else
        {
            ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('Invalid Username Or Password')</script>");
        }

これが機能しないことを教えてください..?データベースに対してspを実行します..

于 2013-07-16T09:13:14.500 に答える
0

あなたがストアドプロシージャを求めたように..以下はOUTPUTパラメータを持つものです..

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'proc_name')
BEGIN
DROP Procedure [dbo].[proc_name]
END

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO


/*
File Name : proc_name.sql
Description : 
Author : Vinay.T
Date :
*/

CREATE Procedure [dbo].[proc_name]
(
     @Username VarChar(50)
    ,@UPassword varChar(50)
    ,@OutRes int OUTPUT 
)
AS

BEGIN
SET NOCOUNT ON

DECLARE @ErrMsg NVARCHAR(510) --
        ,@ErrorSeverity INT --16 if business error
BEGIN

SET @OutRes = (SELECT count(*) FROM [dbo].Log_Users WHERE Username = @Username And [Password] = @UPassword)


END
GOTO SUCCESS

SUCCESS:
RETURN 1
CRASH:
RAISERROR (@ErrMsg, @ErrorSeverity, 1) WITH NOWAIT
END
GO
GRANT EXEC ON [dbo].[proc_name] TO PUBLIC

GO

============================================

上記のspを実行し、前の回答で提案されているように、DataReaderを使用して出力パラメーターをフェッチします...

于 2013-07-16T07:29:13.473 に答える