在CLR udfc#中循环遍历表

本文关键字:遍历 循环 CLR udfc# | 更新日期: 2023-09-27 18:05:15

我需要写一个CLR UDF从表中读取数据并通过它循环,但最重要的是将数据存储在双精度数组(表只有双精度值),之后我将使用数学库来计算一些东西…

我一直在搜索,但我发现连接到数据库的例子,我想用C# code从存储过程调用它。

我发现的一个例子是这样的,但如何将是步骤,使一个dll而不是连接到数据库,并存储数组中的双值?

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text;

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void CLR_StoredProcedure3()
    {
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = "Context Connection=true";
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
    }  
}

在CLR udfc#中循环遍历表

我认为最有效的方法是分两步完成:

int count;
using (SqlCommand cmdCount = conn.CreateCommand())
{
    cmdCount.CommandText = "SELECT COUNT(*) FROM [MyTable]";
    count = (int)cmdCount.ExecuteScalar();
}
// knowing the number of rows we can efficiently allocate the array
double[] values = new double[count];
using (SqlCommand cmdLoad = conn.CreateCommand())
{
    cmdLoad.CommandText = "SELECT * FROM [MyTable]";
    using(SqlDataReader reader = cmdLoad.ExecuteReader())
    {
        int col = reader.GetOrdinal("MyColumnName");
        for(int i = 0; i < count && reader.Read(); i++)
        {
            values[i] = reader.GetDouble(col);
        }
    }
}
// do more processing on values[] here