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

ASP.NET 2.0 呼叫 SQL Server CLR 預存程序:SqlContext.Pipe.ExecuteAndSend 與 DataList 繫結實戰

     編輯:關於ASP.NET

探討如何在 ASP.NET 2.0 中呼叫 SQL Server CLR 整合預存程序,並將 SqlContext.Pipe.ExecuteAndSend 直接回傳的結果繫結至 DataList 控制項。

CLR 預存程序範例

[Microsoft.SqlServer.Server.SqlProcedure()]
public static void StoredProcExecuteCommand(int rating)
{
    using (SqlConnection connection = new SqlConnection("context connection=true"))
    {
        connection.Open();
        SqlCommand command = new SqlCommand(
            "SELECT VendorID, AccountNumber, Name FROM Purchasing.Vendor " +
            "WHERE CreditRating <= @rating", connection);
        command.Parameters.AddWithValue("@rating", rating);
        // 直接將結果串流傳送給用戶端
        SqlContext.Pipe.ExecuteAndSend(command);
    }
}

ASP.NET 端呼叫與繫結策略

ExecuteAndSend 直接將結果輸出至訊息管道(類似 SSMS 的「結果」視窗),不會回傳 DataReader 或 DataTable。因此無法直接繫結至 DataList。

解決方案:改用 SqlDataAdapter 填充 DataTable

// ASP.NET 端呼叫程式碼
using (SqlConnection conn = new SqlConnection(connString))
{
    using (SqlCommand cmd = new SqlCommand("StoredProcExecuteCommand", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@rating", rating);
        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        adapter.Fill(dt);
        DataList1.DataSource = dt;
        DataList1.DataBind();
    }
}

若預存程序必須保留 ExecuteAndSend 行為(如回傳多結果集、動態查詢),建議在 CLR 程序中改用 SqlDataReader 回傳,或於 ASP.NET 端使用 SqlCommand.ExecuteReader 讀取。

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