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

C# 呼叫 SQL Server 2000 預存程序完整實戰指南

     編輯:關於SqlServer

前言

在企業級應用開發中,預存程序是資料庫操作的核心技術之一。它不僅能封裝複雜的商業邏輯,還能有效防止 SQL 注入、提升執行效率。本文將以 SQL Server 2000 為例,完整示範如何建立帶輸出參數的預存程序,並透過 C# 進行呼叫與參數處理。

一、在 SQL Server 2000 中建立預存程序

首先,我們建立一個簡單的登入驗證預存程序 p_Login,接收使用者帳號、密碼,並透過 OUTPUT 參數回傳查詢結果:

CREATE PROCEDURE p_Login
    @UserID   varchar(20),   -- 使用者帳號
    @PassWord varchar(20),   -- 使用者密碼
    @Result   varchar(50) OUTPUT  -- 登入結果(輸出參數)
AS
BEGIN
    SELECT @Result = Name 
    FROM student 
    WHERE TestCardID = @UserID AND password = @PassWord
END
GO

關鍵點解析:

  • 使用 OUTPUT 關鍵字標記輸出參數,讓呼叫端能接收回傳值
  • 直接將查詢結果賦值給 @Result,避免使用 SELECT 回傳結果集
  • 預存程序名稱建議加上前綴(如 p_),便於管理與識別

二、C# 端完整呼叫程式碼

以下展示標準的 ADO.NET 呼叫模式,包含連線字串讀取、參數配置、執行與資源釋放:

string cnnString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
using (SqlConnection conn = new SqlConnection(cnnString))
using (SqlCommand comm = new SqlCommand("p_Login", conn))
{
    comm.CommandType = CommandType.StoredProcedure;

    // 輸入參數
    comm.Parameters.Add("@UserID", SqlDbType.VarChar, 50).Value = userID;
    comm.Parameters.Add("@PassWord", SqlDbType.VarChar, 50).Value = passWord;

    // 輸出參數:必須指定 Direction
    SqlParameter outputParam = comm.Parameters.Add("@Result", SqlDbType.VarChar, 50);
    outputParam.Direction = ParameterDirection.Output;

    conn.Open();
    comm.ExecuteNonQuery(); // 執行不回傳結果集的命令
    
    // 取得輸出參數值
    return outputParam.Value?.ToString() ?? string.Empty;
}

三、核心最佳實踐總結

  1. 參數化查詢:絕不拼接 SQL 字串,杜絕注入風險
  2. using 區塊:確保連線與命令物件正確 Dispose,避免連線洩漏
  3. 輸出參數方向:務必設定 ParameterDirection.Output 或 InputOutput
  4. 長度一致性:C# 端參數長度應與資料庫定義一致(如 VarChar(50))
  5. 空值處理:使用 ?.ToString() ?? string.Empty 防止 NullReferenceException

四、常見錯誤與除錯技巧

錯誤現象可能原因解決方案
回傳 null查無資料或欄位名錯誤在 SSMS 中直接執行預存程序驗證邏輯
ParameterDirection 錯誤未設定 Output 方向檢查 Parameters["@Result"].Direction 設定
型別不符例外SqlDbType 與資料庫型別不符核對 VarChar/NVarChar、長度是否一致

掌握這套標準流程,即可在專案中安全、高效地使用預存程序進行資料存取。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved