SqlHelperExtender DiscoverSpParameterSet
时间:2010-08-30 来源:leslie116
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;
}
}