Циклическая таблица в CLR UDF C # - PullRequest
1 голос
/ 11 августа 2011

Мне нужно написать UDF CLR, который читает данные из таблицы и проходит по ней, но самое важное - хранить данные в двойных массивах (таблица имеет только двойные значения), после чего я буду использовать математикубиблиотека для вычисления некоторых вещей ...

Я искал, но я нашел примеры, которые подключаются к базе данных, я хочу создать .dll с C# code и вызывать его из хранимой процедуры .

Вот пример, который я нашел, но как сделать шаги для создания dll вместо подключения к db и сохранения двойных значений в массиве?

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;

    }  
}

1 Ответ

2 голосов
/ 11 августа 2011

Я думаю, что наиболее эффективный способ сделать это в два этапа:

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
...