首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 呼叫帶輸入/輸出參數的預存程序 — 登入驗證範例

     編輯:關於C語言

資料庫預存程序 (SQL Server)


USE Hotel
IF EXISTS (SELECT * FROM sysobjects WHERE name='proc_userinfo')
    DROP PROC proc_userinfo
GO
CREATE PROC proc_userinfo
    @username VARCHAR(50),  -- 輸入
    @pwd VARCHAR(50),       -- 輸入
    @grade VARCHAR(20),     -- 輸入
    @count INT OUTPUT       -- 輸出 (不可少 OUTPUT)
AS
    SELECT @count = COUNT(*) FROM userinfo
    WHERE username = @username AND pwd = @pwd AND grade = @grade
GO

-- 測試執行
DECLARE @n INT
EXEC proc_userinfo 'admin', '123', '管理員', @n OUTPUT
PRINT @n

資料存取層 (C#)


public bool GetUserinfo(string username, string pwd, string grade)
{
    string connStr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
    int count = 0;

    using (var conn = new SqlConnection(connStr))
    using (var cmd = new SqlCommand("proc_userinfo", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add("@username", SqlDbType.VarChar, 50).Value = username;
        cmd.Parameters.Add("@pwd", SqlDbType.VarChar, 50).Value = pwd;
        cmd.Parameters.Add("@grade", SqlDbType.VarChar, 50).Value = grade;

        var pCount = cmd.Parameters.Add("@count", SqlDbType.Int);
        pCount.Direction = ParameterDirection.Output; // 關鍵:指定輸出方向

        conn.Open();
        cmd.ExecuteScalar(); // 執行預存程序
        count = (int)pCount.Value; // 取得輸出參數值
    }

    return count == 1;
}

關鍵點

  • CommandType.StoredProcedure 告知命令類型。
  • ParameterDirection.Output 標記輸出參數,否則無法回傳值。
  • ExecuteScalar 執行並捨棄結果集 (此處預存程序無結果集,僅輸出參數)。
  • 輸出參數值在執行後透過 cmd.Parameters["@count"].Value 取得。

補充:清空 DataGridView 資料


var dt = (DataTable)dataGridView.DataSource;
dt.Rows.Clear();
dataGridView.DataSource = dt;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved