SqlHelperExtender DiscoverSpParameterSet

   private static SqlParameter[] DiscoverSpParameterSet(SqlConnection connection, string spName, bool includeReturnValueParameter, DataTable dt, SqlTransaction transaction)
        {
            using (SqlCommand cmd = new SqlCommand(spName, connection, transaction))
            {
                if (connection.State == ConnectionState.Closed || connection.State == ConnectionState.Broken)
                    connection.Open();
                cmd.CommandType = CommandType.StoredProcedure;
                //fetch parameters from SQL Server

                SqlCommandBuilder.DeriveParameters(cmd);
                //remove the return value if it's not needed
                if (!includeReturnValueParameter)
                {
                    cmd.Parameters.RemoveAt(0);
                }
                //store the parameters in an array
                SqlParameter[] discoveredParameters = new SqlParameter[cmd.Parameters.Count]; ;
                cmd.Parameters.CopyTo(discoveredParameters, 0);

                //see if we should match the parameters with fields in a DataTable
                if (dt != null)
                {
                    foreach (SqlParameter p in discoveredParameters)
                    {
                        string sourceColumn = p.ParameterName.Substring(1);
                        //when the parameter name (excluding '@') matches a field name...
                        if (dt.Columns.Contains(sourceColumn))
                        {
                            //...we link to it using the SourceColumn property
                            p.SourceColumn = sourceColumn;
                        }
                        else if (sourceColumn.StartsWith("Original_",StringComparison.OrdinalIgnoreCase))
                        {
                            sourceColumn = sourceColumn.Substring(9);
                            if (dt.Columns.Contains(sourceColumn))
                            {
                                p.SourceColumn = sourceColumn;
                                p.SourceVersion = DataRowVersion.Original;
                            }
                        }
                    }
                }

                return discoveredParameters;
            }
        }

posted @ 2010-08-30 22:07  leslie116  阅读(324)  评论(0编辑  收藏  举报