All pastes #78721 Raw Edit

AJ

public text v1 · immutable
·published 2006-07-04 13:59 UTC
rendered paste body
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Text;

using Microsoft.SqlServer.Server;

using PremierSoftware.SqlUtilities;

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void up_CLR_PopulateCollectionFromIDs(SqlBytes TableName, SqlBytes SelectOrdinals, SqlBytes DisplayMemberOrdinals, SqlBytes IDs, SqlBoolean UseNotIn)
    {
        using (SqlConnection con = new SqlConnection("Context connection=true"))
        {
            int[] selectOrdinals = Converters.ConvertSqlBytesToInts(SelectOrdinals);
            int[] displayMemberOrdinals = Converters.ConvertSqlBytesToInts(DisplayMemberOrdinals);
            int[] ids = Converters.ConvertSqlBytesToInts(IDs);

            StringBuilder idsString = new StringBuilder();

            #region Generate IDs string
            for (int i = 0; i < ids.Length; i++)
            {
                idsString.Append(ids[i]);

                if (i != ids.Length - 1)
                    idsString.Append(", ");
            }
            #endregion

            StringBuilder command = new StringBuilder("SELECT ");

            #region Generate Select Fields
            for (int i = 0; i < selectOrdinals.Length; i++)
            {
                using (SqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "up_CLR_GetColumnName";
                    cmd.Parameters.Add(new SqlParameter("TableName", TableName));
                    cmd.Parameters.Add(new SqlParameter("Ordinal", selectOrdinals[i]));

                    con.Open();

                    command.Append(cmd.ExecuteScalar().ToString());

                    con.Close();
                }

                if (i != selectOrdinals.Length - 1)
                    command.Append(", ");
            }
            #endregion

            #region Generate Select DisplayMember
            if (displayMemberOrdinals.Length > 0)
            {
                command.Append(", ");

                for (int i = 0; i < displayMemberOrdinals.Length; i++)
                {
                    using (SqlCommand cmd = con.CreateCommand())
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.CommandText = "up_CLR_GetColumnName";
                        cmd.Parameters.Add(new SqlParameter("TableName", TableName));
                        cmd.Parameters.Add(new SqlParameter("Ordinal", displayMemberOrdinals[i]));

                        con.Open();

                        command.Append(cmd.ExecuteScalar().ToString());

                        con.Close();
                    }

                    if (i != selectOrdinals.Length - 1)
                        command.Append(" + ' ' + ");
                }

                command.Append("as DisplayMember");
            }
            #endregion

            #region Generate Where
            if (ids.Length > 0)
            {
                command.Append(" WHERE T_");
                command.Append(TableName);
                command.Append(".");
                command.Append(TableName);
                command.Append("ID ");

                if (UseNotIn)
                    command = command + "not ";

                command.Append("in ( @IDs )");
            }
            #endregion

            using (SqlCommand cmd = con.CreateCommand())
            {
                cmd.CommandText = command.ToString();
                cmd.Parameters.Add(new SqlParameter("@IDs", idsString));

                con.Open();

                SqlContext.Pipe.ExecuteAndSend(cmd);
            }
        }
    }
};