Вывод хранимой процедуры SQL CLR - PullRequest
3 голосов
/ 29 декабря 2010

существует простой класс User и список его объектов

 <code> public class User
{
public int ID;
public string UserName;
public string UserPassword;
}
...
List userList = new List();
   

Могу ли я создать этот список объектов User в результате выполнения хранимой процедуры SLQ CLR?например, я хочу получить это

<code>
ID   UserName  UserPassword
1    Ted       SomePassword
2    Sam       Password2
3    Bill      dsdsd

<code>
[SqlProcedure]
public static void GetAllocations()
{
    // what here ??
}

PS Пожалуйста, не советуйте мне использовать функции Sql.Меня это не устраивает, поскольку он не поддерживает выходные параметры

PS2 Буду очень признателен за любую помощь!

1 Ответ

3 голосов
/ 29 декабря 2010

Попробуйте создать виртуальную таблицу с SqlDataRecord и отправить ее через свойство Pipe объекта SqlContext :

[SqlProcedure]
public static void GetAllocations()
{
    // define table structure
    SqlDataRecord rec = new SqlDataRecord(new SqlMetaData[] {
        new SqlMetaData("ID", SqlDbType.Int),
        new SqlMetaData("UserName", SqlDbType.VarChar),
        new SqlMetaData("UserPassword", SqlDbType.VarChar),
    });

    // start sending and tell the pipe to use the created record
    SqlContext.Pipe.SendResultsStart(rec);
    {
        // send items step by step
        foreach (User user in GetUsers())
        {
            int id = user.ID;
            string userName = user.UserName;
            string userPassword = user.UserPassword;

            // set values
            rec.SetSqlInt32(0, id);
            rec.SetSqlString(1, userName);
            rec.SetSqlString(2, userPassword);

            // send new record/row
            SqlContext.Pipe.SendResultsRow(rec);
        }
    }
    SqlContext.Pipe.SendResultsEnd();    // finish sending
}
...