using System.Collections.Generic; using System.Data.SqlClient; using System.Text; namespace Adaptation.EpiControlPlan { namespace CPGet { public class PartParamListFromHist { public object Part { get; set; } public PartParamListFromHist(SqlDataReader sqlReader) { Part = sqlReader.GetSqlValue(0); } public static List GetPartParamListFromHist(string connectionString) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" SELECT "). Append(" DISTINCT part "). Append(" FROM ControlPlans.dbo.[Part_Parameter_Hist] "). Append(" ORDER BY part "); return GetPartParamListFromHist(connectionString, sql); } private static List GetPartParamListFromHist(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new PartParamListFromHist(sqlReader)); } } } return results; } } public class PartParametersFromHist { public object Part { get; set; } public object Parameter { get; set; } public object Lsl { get; set; } public object Lcl { get; set; } public object Target { get; set; } public object Ucl { get; set; } public object Usl { get; set; } public object Crit_to_ship { get; set; } public object Reference_doc { get; set; } public object Comment { get; set; } public object Customer_spec { get; set; } public object Stamp { get; set; } public object Engineer_signoff { get; set; } public object Manager_signoff { get; set; } public object Quality_signoff { get; set; } public PartParametersFromHist(SqlDataReader sqlReader) { Part = sqlReader.GetSqlValue(0); Parameter = sqlReader.GetSqlValue(1); Lsl = sqlReader.GetSqlValue(2); Lcl = sqlReader.GetSqlValue(3); Target = sqlReader.GetSqlValue(4); Ucl = sqlReader.GetSqlValue(5); Usl = sqlReader.GetSqlValue(6); Crit_to_ship = sqlReader.GetSqlValue(7); Reference_doc = sqlReader.GetSqlValue(8); Comment = sqlReader.GetSqlValue(9); Customer_spec = sqlReader.GetSqlValue(10); Stamp = sqlReader.GetSqlValue(11); Engineer_signoff = sqlReader.GetSqlValue(12); Manager_signoff = sqlReader.GetSqlValue(13); Quality_signoff = sqlReader.GetSqlValue(14); } public static List GetPartParametersFromHist(string connectionString, string partNumber) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" SELECT "). Append(" part, parameter, lsl, lcl, target, ucl, usl, crit_to_ship, reference_doc, comment, customer_spec, stamp, engineer_signoff, manager_signoff, quality_signoff "). Append(" FROM ControlPlans.dbo.[Part_Parameter_Hist] "). Append(" WHERE part= '$partNumber$' "). Append(" /* WHERE part= '1208B' Example */ "). Append(" ORDER BY stamp "); sql.Replace("$partNumber$", partNumber); return GetPartParametersFromHist(connectionString, sql); } private static List GetPartParametersFromHist(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new PartParametersFromHist(sqlReader)); } } } return results; } } public class PartParameters { public object Part { get; set; } public object Enum { get; set; } public object Parameter { get; set; } public object Lsl { get; set; } public object Lcl { get; set; } public object Target { get; set; } public object Ucl { get; set; } public object Usl { get; set; } public object Crit_to_ship { get; set; } public object Reference_doc { get; set; } public object Comment { get; set; } public object Customer_spec { get; set; } private static string _ConnectionStringIrmnSpc; private static string _ConnectionStringG4Wafers; public static void SetConnectionStringIrmnSpc(string connectionString) { _ConnectionStringIrmnSpc = connectionString; } public static void SetConnectionStringG4Wafers(string connectionString) { _ConnectionStringG4Wafers = connectionString; } public PartParameters(SqlDataReader sqlReader) { Part = sqlReader.GetSqlValue(0); Enum = sqlReader.GetSqlValue(1); Parameter = sqlReader.GetSqlValue(2); Lsl = sqlReader.GetSqlValue(3); Lcl = sqlReader.GetSqlValue(4); Target = sqlReader.GetSqlValue(5); Ucl = sqlReader.GetSqlValue(6); Usl = sqlReader.GetSqlValue(7); Crit_to_ship = sqlReader.GetSqlValue(8); Reference_doc = sqlReader.GetSqlValue(9); Comment = sqlReader.GetSqlValue(10); Customer_spec = sqlReader.GetSqlValue(11); } public static List GetPartParameters(string partNumber) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" select "). Append(" p.part, a.enum, p.parameter, p.lsl, p.lcl, p.target, p.ucl, p.usl, p.crit_to_ship, p.reference_doc, p.comment, p.customer_spec "). Append(" from ( "). Append(" select 'Code' enum, 'ControlPlan' control_plan union all "). Append(" select 'AFM_Pit_Count', 'AFM Pit Count' union all "). Append(" select 'AFM_Roughness', 'Roughness' union all "). Append(" select 'Al', 'Al' union all "). Append(" select 'Al_B_B_', 'Al% B.B.' union all "). Append(" select 'Al_B_B_WTAVG', 'BB composition' union all "). Append(" select 'Al_Barrier', 'Al% Barrier' union all "). Append(" select 'Al_Barrier_WTAVG', 'Al% Barrier WTAVG' union all "). Append(" select 'Al_SLS', 'Al% SLS' union all "). Append(" select 'Al_SLS_WTAVG', 'SLS composition' union all "). Append(" select 'Al_TL1', 'Al% TL1' union all "). Append(" select 'Al_TL1_WTAVG', 'Al% TL1 WTAVG' union all "). Append(" select 'Al_TL2_WTAVG', 'Al% TL2 WTAVG' union all "). Append(" select 'As', 'As' union all "). Append(" select 'Au', 'Au' union all "). Append(" select 'B', 'B' union all "). Append(" select 'Ba', 'Ba' union all "). Append(" select 'BandEdge_V', 'BandEdge_V' union all "). Append(" select 'BandEdge_V_XY', 'BandEdge_V_XY' union all "). Append(" select 'BandEdge_nm', 'BandEdge_nm' union all "). Append(" select 'Barrier_Composition_RPM_XY', 'Barrier Composition' union all "). Append(" select 'Bow', 'Bow' union all "). Append(" select 'BowCenter', 'Bow Center' union all "). Append(" select 'BowX', 'BowX' union all "). Append(" select 'BowY', 'BowY' union all "). Append(" select 'Bow_Calibration', 'Bow Calibration' union all "). Append(" select 'Bow_Range', 'Bow Range' union all "). Append(" select 'Breakdown_Voltage', 'BV Center' union all "). Append(" select 'Breakdown_VoltageMiddle', 'BV Middle' union all "). Append(" select 'Breakdown_Voltage_Edge', 'BV Edge' union all "). Append(" select 'CV_C_at_10V', 'CV C at -10V' union all "). Append(" select 'CV_Nd_Min', 'CV Nd Min' union all "). Append(" select 'Ca', 'Ca' union all "). Append(" select 'Candela_102_83nm', '102-83nm' union all "). Append(" select 'Candela_1_1um', '1.1um' union all "). Append(" select 'Candela_496nm', '496nm' union all "). Append(" select 'Candela_600nm', '600nm' union all "). Append(" select 'Candela_8620_Small', '8620 Small' union all "). Append(" select 'Candela_Crack_Verification', 'Crack Verification' union all "). Append(" select 'Candela_Cracking', 'Cracks' union all "). Append(" select 'Candela_Cracking_Acceptable', 'Cracking Acceptable' union all "). Append(" select 'Candela_Crater', 'Crater' union all "). Append(" select 'Candela_Crater_Verification', 'Crater verification' union all "). Append(" select 'Candela_Haze', 'Haze' union all "). Append(" select 'Candela_LPD_Large', 'LPD-large' union all "). Append(" select 'Candela_LPD_Medium', 'LPD-medium' union all "). Append(" select 'Candela_LPD_Small', 'Light point defect (LPD) -small' union all "). Append(" select 'Candela_Large_Verification', 'Large Verification' union all "). Append(" select 'Candela_Medium_Verification', 'Medium Verification' union all "). Append(" select 'Candela_Pits', 'Pits' union all "). Append(" select 'Candela_Pits_Verification', 'Pits verification' union all "). Append(" select 'Candela_SPE', 'SPE' union all "). Append(" select 'Candela_SPE_Verification', 'SPE verification' union all "). Append(" select 'Candela_Slip', 'Slip' union all "). Append(" select 'Candela_Small_Verification', 'Small Verification' union all "). Append(" select 'Candela_Spirals', 'Spirals' union all "). Append(" select 'Candela_Total_Defects', 'Candela Total Defects' union all "). Append(" select 'Candela__1_1um', '>1.1um' union all "). Append(" select 'Ce', 'Ce' union all "). Append(" select 'Co', 'Co' union all "). Append(" select 'Contact_Symmetry', 'Contact Symmetry' union all "). Append(" select 'Cr', 'Cr' union all "). Append(" select 'Cu', 'Cu' union all "). Append(" select 'Date', 'Date' union all "). Append(" select 'Denton_Crystal_Life', 'Denton_Crystal_Life' union all "). Append(" select 'Denton_Current_AVG', 'Denton_Current_AVG' union all "). Append(" select 'Denton_Current_STDEV', 'Denton_Current_STDEV' union all "). Append(" select 'Denton_Deposition_Power_AVG', 'Denton_Deposition_Power_AVG' union all "). Append(" select 'Denton_Deposition_Power_STDEV', 'Denton_Deposition_Power_STDEV' union all "). Append(" select 'Denton_Deposition_Rate_AVG', 'Denton_Deposition_Rate_AVG' union all "). Append(" select 'Denton_Deposition_Rate_STDEV', 'Denton_Deposition_Rate_STDEV' union all "). Append(" select 'Denton_Gun_Pocket', 'Denton_Gun_Pocket' union all "). Append(" select 'Denton_Pumpdown_Time', 'Denton_Pumpdown_Time' union all "). Append(" select 'Denton_Voltage_AVG', 'Denton_Voltage_AVG' union all "). Append(" select 'Denton_Voltage_STDEV', 'Denton_Voltage_STDEV' union all "). Append(" select 'Employee', 'Employee' union all "). Append(" select 'Epi_Thickness_Mean', 'Epi thickness' union all "). Append(" select 'Epi_Thickness_Mean_XY', 'Epi Thickness Mean_XY' union all "). Append(" select 'Epi_Thickness_Std_Dev_', 'Epi thickness uniformity' union all "). Append(" select 'FWHM_006', 'FWHM 006' union all "). Append(" select 'FWHM_006_WTAVG', 'FWHM 006 WTAVG' union all "). Append(" select 'FWHM_105', 'FWHM 105' union all "). Append(" select 'FWHM_105_WTAVG', 'FWHM 105 WTAVG' union all "). Append(" select 'Fe', 'Fe' union all "). Append(" select 'Ga', 'Ga' union all "). Append(" select 'Ge', 'Ge' union all "). Append(" select 'Hall_Mobility_verif_sample', 'Hall_Mobility_verif_sample' union all "). Append(" select 'Hall_Ns_verif_sample', 'Hall_Ns_verif_sample' union all "). Append(" select 'Hall_Rs', 'RS' union all "). Append(" select 'Hall_Rs_verif_sample', 'Hall_Rs_verif_sample' union all "). Append(" select 'Hf', 'Hf' union all "). Append(" select 'Job', 'Job' union all "). Append(" select 'K', 'K' union all "). Append(" select 'LEI_RS_Average_value', 'LEI RS Average value' union all "). Append(" select 'LEI_RS_Maximum_value', 'LEI RS Maximum value' union all "). Append(" select 'LEI_RS_Minimum_value', 'LEI RS Minimum value' union all "). Append(" select 'LEI_RS_STDEV', 'LEI RS STDEV' union all "). Append(" select 'LEI_RS_STDEV_', 'LEI RS STDEV%' union all "). Append(" select 'Li', 'Li' union all "). Append(" select 'Lot', 'Lot' union all "). Append(" select 'Mg', 'Mg' union all "). Append(" select 'Mn', 'Mn' union all "). Append(" select 'Mo', 'Mo' union all "). Append(" select 'Mobility', 'Mobility' union all "). Append(" select 'Mobility_Verification', 'Mobility Verification' union all "). Append(" select 'Na', 'Na' union all "). Append(" select 'Ni', 'Ni' union all "). Append(" select 'Ns_Verification', 'Ns Verification' union all "). Append(" select 'P', 'P' union all "). Append(" select 'PL_Edge_Wavelength', 'PL Edge Wavelength' union all "). Append(" select 'PL_Ratio', 'PL Ratio' union all "). Append(" select 'PR_Barrier_Composition', 'PR Barrier Composition' union all "). Append(" select 'PR_Peak', 'PR Peak' union all "). Append(" select 'Part', 'Part' union all "). Append(" select 'Pb', 'Pb' union all "). Append(" select 'Process', 'Process' union all "). Append(" select 'Recipe', 'Recipe' union all "). Append(" select 'Rs_verif_100kohm', 'Rs_verif_100kohm' union all "). Append(" select 'Rs_verif_10ohm', 'Rs_verif_10ohm' union all "). Append(" select 'Rs_verif_1kohm', 'Rs_verif_1kohm' union all "). Append(" select 'Rs_verification', 'Rs verification' union all "). Append(" select 'SID', 'SID' union all "). Append(" select 'SL_Period', 'SL Period' union all "). Append(" select 'SL_Period_WTAVG', 'SL Period' union all "). Append(" select 'Sheet_Concentration', 'Sheet Concentration' union all "). Append(" select 'Sn', 'Sn' union all "). Append(" select 'Ta', 'Ta' union all "). Append(" select 'Ti', 'Ti' union all "). Append(" select 'Time', 'Time' union all "). Append(" select 'Tool_ID', 'Tool ID' union all "). Append(" select 'Total_Warp_Calibration', 'Total Warp Calibration' union all "). Append(" select 'UV_Broken', 'Broken' union all "). Append(" select 'UV_Chipping', 'Chipping' union all "). Append(" select 'UV_Cracking_0_3mm_', 'UV Cracking (0-3mm)' union all "). Append(" select 'UV_Cracking_3_7mm_', 'Cracking (3-7mm)' union all "). Append(" select 'UV_Cracking_7mm_', 'Cracking (>7mm)' union all "). Append(" select 'UV_Crazing', 'UV Crazing' union all "). Append(" select 'UV_Crazing_Acceptable', 'UV Crazing Acceptable' union all "). Append(" select 'UV_FULL_Characterization_Wafer', 'UV FULL Characterization Wafer' union all "). Append(" select 'UV_Haze_count_', 'UV Haze (count)' union all "). Append(" select 'UV_LIGHT_Characterization_Wafer', 'UV LIGHT Characterization Wafer' union all "). Append(" select 'UV_Non_rotation', 'Non-rotation' union all "). Append(" select 'UV_Other', 'UV Other' union all "). Append(" select 'UV_SPE_1mm_count', 'SPE (>1mm) count' union all "). Append(" select 'UV_SPE_count_', 'UV-SPE (count)' union all "). Append(" select 'UV_Scratch_count_', 'Scratch (count)' union all "). Append(" select 'UV_Slip_count_', 'UV Slip (count)' union all "). Append(" select 'UV_True_Haze', 'UV True Haze' union all "). Append(" select 'UV_True_Haze_Acceptable', 'UV True Haze Acceptable' union all "). Append(" select 'Verification_Contact_Symmetry', 'Verification Contact Symmetry' union all "). Append(" select 'Vp_Pinch_Off_Voltage', 'Vp Pinch Off Voltage' union all "). Append(" select 'W', 'W' union all "). Append(" select 'WaferPocket_Candela', 'WaferPocket_Candela' union all "). Append(" select 'WaferPocket_Warp', 'WaferPocket_Warp' union all "). Append(" select 'WaferPosition_BV', 'WaferPosition_BV' union all "). Append(" select 'WaferPosition_CV', 'WaferPosition_CV' union all "). Append(" select 'WaferPosition_Hall', 'WaferPosition_Hall' union all "). Append(" select 'WaferPosition_PR', 'WaferPosition_PR' union all "). Append(" select 'Wafer_ID', 'Wafer ID' union all "). Append(" select 'Wafer_Region', 'Wafer Region' union all "). Append(" select 'Wafer_Scribe', 'Wafer Scribe' union all "). Append(" select 'Warp', 'Warp' union all "). Append(" select 'XRD_2_Theta_Peak_002', 'XRD 2 Theta Peak 002' union all "). Append(" select 'XRD_2_Theta_Peak_101', 'XRD 2 Theta Peak 101' union all "). Append(" select 'XRD_2_Theta_Position', 'XRD 2-Theta Position' union all "). Append(" select 'XRD_2_Theta_Position_Si_1', 'XRD 2-Theta Position Si 1' union all "). Append(" select 'XRD_2_Theta_Position_Si_2', 'XRD 2-Theta Position Si 2' union all "). Append(" select 'XRD_2_Theta_Position_Si_3', 'XRD 2-Theta Position Si 3' union all "). Append(" select 'XRD_Peak_002_Intensity', 'XRD Peak 002 Intensity' union all "). Append(" select 'XRD_Peak_101_Intensity', 'XRD Peak 101 Intensity' union all "). Append(" select 'XRD_Weekly_AL_Center', 'XRD Weekly AL% Center' union all "). Append(" select 'XRD_Weekly_Back_Barrier_Al_', 'Back Barrier Al%' union all "). Append(" select 'XRD_Weekly_Barrier_Al_', 'Barrier Al%' union all "). Append(" select 'XRD_Weekly_FWHM_002', 'XRD Weekly FWHM 002' union all "). Append(" select 'XRD_Weekly_FWHM_101', 'XRD Weekly FWHM 101' union all "). Append(" select 'XRD_Weekly_FWHM_105', 'XRD Weekly FWHM 105' union all "). Append(" select 'XRD_Weekly_Fringe_thick_0_0_', 'XRD Weekly Fringe thick (00)' union all "). Append(" select 'XRD_Weekly_Fringe_thick_48_48_', 'XRD Weekly Fringe thick (4848)' union all "). Append(" select 'XRD_Weekly_Super_Lattice_Al_', 'Super Lattice Al%' union all "). Append(" select 'XRD_Weekly_Super_Lattice_period', 'Super Lattice period' union all "). Append(" select 'XRD_Weekly_Super_Lattice_tks', 'Super Lattice tks' union all "). Append(" select 'XRR_Thickness_nm_', 'XRR Thickness (nm)' union all "). Append(" select 'XRR_Thickness_nm_WTAVG', 'Barrier Thickness XRR' union all "). Append(" select 'X_Coord', 'X-Coord' union all "). Append(" select 'Y', 'Y' union all "). Append(" select 'Y_Coord', 'Y-Coord' union all "). Append(" select 'YellowBand_Power_mW_', 'YellowBand_Power (mW)' union all "). Append(" select 'YellowBand_V', 'YellowBand_V' union all "). Append(" select 'YellowBand_V_XY', 'YellowBand_V_XY' union all "). Append(" select 'YellowBand_nm', 'YellowBand_nm' union all "). Append(" select 'Zn', 'Zn' "). Append(" ) as a "). Append(" join ControlPlans.dbo.[Part_Parameter] p "). Append(" on p.parameter = a.control_plan "). Append(" where p.part= '$partNumber$' "). Append(" order by p.parameter "); sql.Replace("$partNumber$", partNumber); return GetPartParameters(_ConnectionStringIrmnSpc, sql); } private static List GetPartParameters(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new PartParameters(sqlReader)); } } } return results; } } public class Part { public object Generation { get; set; } public object Tr_status { get; set; } public object Essential_part_number { get; set; } public object Part_number_description { get; set; } public object Irmn_part_number { get; set; } public object Spec_version { get; set; } public object Spec_version_effective_date { get; set; } public object Engr_status { get; set; } public object Qual_status { get; set; } public object Prod_status { get; set; } public object Process_flow { get; set; } public object Wafer_thickness { get; set; } public object Wafer_spec { get; set; } public object Comment { get; set; } public object Number_wafers { get; set; } public Part(SqlDataReader sqlReader) { Generation = sqlReader.GetSqlValue(0); Tr_status = sqlReader.GetSqlValue(1); Essential_part_number = sqlReader.GetSqlValue(2); Part_number_description = sqlReader.GetSqlValue(3); Irmn_part_number = sqlReader.GetSqlValue(4); Spec_version = sqlReader.GetSqlValue(5); Spec_version_effective_date = sqlReader.GetSqlValue(6); Engr_status = sqlReader.GetSqlValue(7); Qual_status = sqlReader.GetSqlValue(8); Prod_status = sqlReader.GetSqlValue(9); Process_flow = sqlReader.GetSqlValue(10); Wafer_thickness = sqlReader.GetSqlValue(11); Wafer_spec = sqlReader.GetSqlValue(12); Comment = sqlReader.GetSqlValue(13); Number_wafers = sqlReader.GetSqlValue(14); } public static List GetPart(string connectionString, string partNumber) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" SELECT "). Append(" generation, tr_status, essential_part_number, part_number_description, irmn_part_number, spec_version, spec_version_effective_date, engr_status, qual_status, prod_status, process_flow, wafer_thickness, wafer_spec, comment, number_wafers "). Append(" FROM ControlPlans.dbo.[Part] "). Append(" WHERE part= '$partNumber$' "). Append(" /* WHERE part= '1208B' Example */ "); sql.Replace("$partNumber$", partNumber); return GetPart(connectionString, sql); } private static List GetPart(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new Part(sqlReader)); } } } return results; } } public class Parameters { public object Parameter { get; set; } public object Iqs_name { get; set; } public object Scrap_priority { get; set; } public object Units { get; set; } public object Grade { get; set; } public object Skip_if_light { get; set; } public object Ocap_document { get; set; } public object Measurement_method { get; set; } public object Scrap_reason_text { get; set; } public object Number_wafers { get; set; } public object Number_decimals { get; set; } public object Promis_scrap_code { get; set; } public object Process_number { get; set; } public object Process_name { get; set; } public object Characteristic_number { get; set; } public object Machine_for_mfg { get; set; } public object Size { get; set; } public object Frequency { get; set; } public object Control_method { get; set; } public object Comment { get; set; } public object Sort_order { get; set; } private static string _ConnectionStringIrmnSpc; private static string _ConnectionStringG4Wafers; public static void SetConnectionStringIrmnSpc(string connectionString) { _ConnectionStringIrmnSpc = connectionString; } public static void SetConnectionStringG4Wafers(string connectionString) { _ConnectionStringG4Wafers = connectionString; } public Parameters(SqlDataReader sqlReader) { Parameter = sqlReader.GetSqlValue(0); Iqs_name = sqlReader.GetSqlValue(1); Scrap_priority = sqlReader.GetSqlValue(2); Units = sqlReader.GetSqlValue(3); Grade = sqlReader.GetSqlValue(4); Skip_if_light = sqlReader.GetSqlValue(5); Ocap_document = sqlReader.GetSqlValue(6); Measurement_method = sqlReader.GetSqlValue(7); Scrap_reason_text = sqlReader.GetSqlValue(8); Number_wafers = sqlReader.GetSqlValue(9); Number_decimals = sqlReader.GetSqlValue(10); Promis_scrap_code = sqlReader.GetSqlValue(11); Process_number = sqlReader.GetSqlValue(12); Process_name = sqlReader.GetSqlValue(13); Characteristic_number = sqlReader.GetSqlValue(14); Machine_for_mfg = sqlReader.GetSqlValue(15); Size = sqlReader.GetSqlValue(16); Frequency = sqlReader.GetSqlValue(17); Control_method = sqlReader.GetSqlValue(18); Comment = sqlReader.GetSqlValue(19); Sort_order = sqlReader.GetSqlValue(20); } public static List GetParameters() { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" SELECT "). Append(" parameter, iqs_name, scrap_priority, units, grade, skip_if_light, ocap_document, measurement_method, scrap_reason_text, number_wafers, number_decimals, promis_scrap_code, process_number, process_name, characteristic_number, machine_for_mfg, size, frequency, control_method, comment, sort_order "). Append(" FROM ControlPlans.dbo.[Parameter] "). Append(" ORDER BY sort_order "); return GetParameters(_ConnectionStringIrmnSpc, sql); } private static List GetParameters(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new Parameters(sqlReader)); } } } return results; } } public class GradingLogic { public object Part_qual_status { get; set; } public object Num_crit_oos { get; set; } public object Result { get; set; } public GradingLogic(SqlDataReader sqlReader) { Part_qual_status = sqlReader.GetSqlValue(0); Num_crit_oos = sqlReader.GetSqlValue(1); Result = sqlReader.GetSqlValue(2); } public static List GetGradingLogic(string connectionString) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" SELECT "). Append(" part_qual_status, num_crit_oos, result "). Append(" FROM ControlPlans.dbo.[Grading_Logic] "). Append(" ORDER BY part_qual_status, num_crit_oos "); return GetGradingLogic(connectionString, sql); } private static List GetGradingLogic(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new GradingLogic(sqlReader)); } } } return results; } } public class ParamHistoryList { public object Parameter { get; set; } public ParamHistoryList(SqlDataReader sqlReader) { Parameter = sqlReader.GetSqlValue(0); } public static List GetParamHistoryList(string connectionString) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" SELECT "). Append(" DISTINCT parameter "). Append(" FROM ControlPlans.dbo.[Parameter_Hist] "). Append(" ORDER BY parameter "); return GetParamHistoryList(connectionString, sql); } private static List GetParamHistoryList(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new ParamHistoryList(sqlReader)); } } } return results; } } public class ParamHistory { public object Parameter { get; set; } public object Iqs_name { get; set; } public object Scrap_priority { get; set; } public object Units { get; set; } public object Grade { get; set; } public object Skip_if_light { get; set; } public object Ocap_document { get; set; } public object Measurement_method { get; set; } public object Scrap_reason_text { get; set; } public object Number_wafers { get; set; } public object Number_decimals { get; set; } public object Promis_scrap_code { get; set; } public object Process_number { get; set; } public object Process_name { get; set; } public object Characteristic_number { get; set; } public object Machine_for_mfg { get; set; } public object Size { get; set; } public object Frequency { get; set; } public object Control_method { get; set; } public object Comment { get; set; } public object Stamp { get; set; } public object Engineer_signoff { get; set; } public object Manager_signoff { get; set; } public object Sort_order { get; set; } public ParamHistory(SqlDataReader sqlReader) { Parameter = sqlReader.GetSqlValue(0); Iqs_name = sqlReader.GetSqlValue(1); Scrap_priority = sqlReader.GetSqlValue(2); Units = sqlReader.GetSqlValue(3); Grade = sqlReader.GetSqlValue(4); Skip_if_light = sqlReader.GetSqlValue(5); Ocap_document = sqlReader.GetSqlValue(6); Measurement_method = sqlReader.GetSqlValue(7); Scrap_reason_text = sqlReader.GetSqlValue(8); Number_wafers = sqlReader.GetSqlValue(9); Number_decimals = sqlReader.GetSqlValue(10); Promis_scrap_code = sqlReader.GetSqlValue(11); Process_number = sqlReader.GetSqlValue(12); Process_name = sqlReader.GetSqlValue(13); Characteristic_number = sqlReader.GetSqlValue(14); Machine_for_mfg = sqlReader.GetSqlValue(15); Size = sqlReader.GetSqlValue(16); Frequency = sqlReader.GetSqlValue(17); Control_method = sqlReader.GetSqlValue(18); Comment = sqlReader.GetSqlValue(19); Stamp = sqlReader.GetSqlValue(20); Engineer_signoff = sqlReader.GetSqlValue(21); Manager_signoff = sqlReader.GetSqlValue(22); Sort_order = sqlReader.GetSqlValue(23); } public static List GetParamHistory(string connectionString, string paramName) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" SELECT "). Append(" parameter, iqs_name, scrap_priority, units, grade, skip_if_light, ocap_document, measurement_method, scrap_reason_text, number_wafers, number_decimals, promis_scrap_code, process_number, process_name, characteristic_number, machine_for_mfg, size, frequency, control_method, comment, stamp, engineer_signoff, manager_signoff, sort_order "). Append(" FROM ControlPlans.dbo.[Parameter_Hist] "). Append(" WHERE parameter = '$paramName$' "). Append(" /* WHERE parameter = '002 FWHM' Example */ "). Append(" ORDER BY parameter, stamp "); sql.Replace("$paramName$", paramName); return GetParamHistory(connectionString, sql); } private static List GetParamHistory(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new ParamHistory(sqlReader)); } } } return results; } } public class PartHistoryList { public object Part { get; set; } public PartHistoryList(SqlDataReader sqlReader) { Part = sqlReader.GetSqlValue(0); } public static List GetPartHistoryList(string connectionString) { StringBuilder sql = new StringBuilder(); sql.Append(" SELECT "). Append(" DISTINCT part "). Append(" FROM ControlPlans.dbo.[Part_Hist] "). Append(" ORDER BY part "); return GetPartHistoryList(connectionString, sql); } private static List GetPartHistoryList(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new PartHistoryList(sqlReader)); } } } return results; } } public class PartHistory { public object Part { get; set; } public object Generation { get; set; } public object Tr_status { get; set; } public object Essential_part_number { get; set; } public object Part_number_description { get; set; } public object Irmn_part_number { get; set; } public object Spec_version { get; set; } public object Spec_version_effective_date { get; set; } public object Engr_status { get; set; } public object Qual_status { get; set; } public object Prod_status { get; set; } public object Process_flow { get; set; } public object Wafer_thickness { get; set; } public object Wafer_spec { get; set; } public object Comment { get; set; } public object Number_wafers { get; set; } public object Stamp { get; set; } public object Engineer_signoff { get; set; } public object Manager_signoff { get; set; } private static string _ConnectionStringIrmnSpc; private static string _ConnectionStringG4Wafers; public static void SetConnectionStringIrmnSpc(string connectionString) { _ConnectionStringIrmnSpc = connectionString; } public static void SetConnectionStringG4Wafers(string connectionString) { _ConnectionStringG4Wafers = connectionString; } public PartHistory(SqlDataReader sqlReader) { Part = sqlReader.GetSqlValue(0); Generation = sqlReader.GetSqlValue(1); Tr_status = sqlReader.GetSqlValue(2); Essential_part_number = sqlReader.GetSqlValue(3); Part_number_description = sqlReader.GetSqlValue(4); Irmn_part_number = sqlReader.GetSqlValue(5); Spec_version = sqlReader.GetSqlValue(6); Spec_version_effective_date = sqlReader.GetSqlValue(7); Engr_status = sqlReader.GetSqlValue(8); Qual_status = sqlReader.GetSqlValue(9); Prod_status = sqlReader.GetSqlValue(10); Process_flow = sqlReader.GetSqlValue(11); Wafer_thickness = sqlReader.GetSqlValue(12); Wafer_spec = sqlReader.GetSqlValue(13); Comment = sqlReader.GetSqlValue(14); Number_wafers = sqlReader.GetSqlValue(15); Stamp = sqlReader.GetSqlValue(16); Engineer_signoff = sqlReader.GetSqlValue(17); Manager_signoff = sqlReader.GetSqlValue(18); } public static List GetPartHistory(string partNumber) { StringBuilder sql = new StringBuilder(); sql.Append(" SELECT "). Append(" part, generation, tr_status, essential_part_number, part_number_description, irmn_part_number, spec_version, spec_version_effective_date, engr_status, qual_status, prod_status, process_flow, wafer_thickness, wafer_spec, comment, number_wafers, stamp, engineer_signoff, manager_signoff "). Append(" FROM ControlPlans.dbo.[Part_Hist] "). Append(" WHERE part= '$partNumber$' "). Append(" /* WHERE part= '1208B' Example */ "). Append(" ORDER BY part, stamp "); sql.Replace("$partNumber$", partNumber); return GetPartHistory(_ConnectionStringIrmnSpc, sql); } private static List GetPartHistory(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new PartHistory(sqlReader)); } } } return results; } } } namespace ProcessSectionELotSummaryReport { public class IqsData084 { public object Test_name { get; set; } public object Test_no { get; set; } public object True_pocket { get; set; } public object F_sgrp { get; set; } public IqsData084(SqlDataReader sqlReader) { Test_name = sqlReader.GetSqlValue(0); Test_no = sqlReader.GetSqlValue(1); True_pocket = sqlReader.GetSqlValue(2); F_sgrp = sqlReader.GetSqlValue(3); } public static List GetIqsData084(string connectionString, string lotId) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" SELECT "). Append(" TEST_DAT.F_NAME AS TEST_NAME, SGRP_EXT.F_TSNO AS TEST_NO, SGRP_EXT.F_VAL AS TRUE_POCKET, SGRP_EXT.F_SGRP "). Append(" FROM IRMNSPC.dbo.[SGRP_EXT], IRMNSPC.dbo.[TEST_DAT], IRMNSPC.dbo.[SGRP_DSC], IRMNSPC.dbo.[DESC_DAT], IRMNSPC.dbo.[DESC_GRP] "). Append(" WHERE SGRP_EXT.F_Test = TEST_DAT.F_Test "). Append(" AND SGRP_EXT.F_SGRP = SGRP_DSC.F_SGRP "). Append(" AND SGRP_DSC.F_DESC = DESC_DAT.F_DESC "). Append(" AND DESC_GRP.F_DSGP = DESC_DAT.F_DSGP "). Append(" AND DESC_GRP.F_NAME IN ('Wafer ID') "). Append(" AND SGRP_EXT.F_FLAG IN (0) "). Append(" AND SGRP_EXT.F_LOT IN ( "). Append(" SELECT F_LOT "). Append(" FROM IRMNSPC.dbo.[PART_LOT] "). Append(" WHERE F_NAME = '$LotId$' "). Append(" /* WHERE F_NAME = '0302435hvfet' Example */ "). Append(" ) "). Append(" AND TEST_DAT.F_NAME LIKE 'WaferPocket_%' "); sql.Replace("$LotId$", lotId); return GetIqsData084(connectionString, sql); } private static List GetIqsData084(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new IqsData084(sqlReader)); } } } return results; } } public class IqsData112 { public object Test_name { get; set; } public object F_val { get; set; } public object F_tsno { get; set; } public object F_sbno { get; set; } public object F_sgrp { get; set; } public IqsData112(SqlDataReader sqlReader) { Test_name = sqlReader.GetSqlValue(0); F_val = sqlReader.GetSqlValue(1); F_tsno = sqlReader.GetSqlValue(2); F_sbno = sqlReader.GetSqlValue(3); F_sgrp = sqlReader.GetSqlValue(4); } public static List GetIqsData112(string connectionString, string lotId) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" SELECT "). Append(" TEST_DAT.F_NAME AS TEST_NAME, SGRP_EXT.F_VAL, SGRP_EXT.F_TSNO, SGRP_EXT.F_SBNO, SGRP_EXT.F_SGRP "). Append(" FROM IRMNSPC.dbo.[SGRP_EXT], IRMNSPC.dbo.[TEST_DAT], IRMNSPC.dbo.[SGRP_DSC], IRMNSPC.dbo.[DESC_DAT], IRMNSPC.dbo.[DESC_GRP] "). Append(" WHERE SGRP_EXT.F_Test = TEST_DAT.F_Test "). Append(" AND SGRP_EXT.F_SGRP = SGRP_DSC.F_SGRP "). Append(" AND SGRP_DSC.F_DESC = DESC_DAT.F_DESC "). Append(" AND DESC_GRP.F_DSGP = DESC_DAT.F_DSGP "). Append(" AND SGRP_EXT.F_FLAG IN (0) "). Append(" AND DESC_GRP.F_NAME IN ('Wafer ID') "). Append(" AND SGRP_EXT.F_LOT IN ( "). Append(" SELECT "). Append(" F_LOT "). Append(" FROM IRMNSPC.dbo.[PART_LOT] "). Append(" WHERE F_NAME = '$LotId$' "). Append(" /* WHERE F_NAME = '0302435hvfet' Example */ "). Append(" ) "). Append(" UNION "). Append(" SELECT "). Append(" TEST_DAT.F_NAME AS TEST_NAME, SGRP_EXT.F_VAL, SGRP_EXT.F_TSNO, SGRP_EXT.F_SBNO, SGRP_EXT.F_SGRP "). Append(" FROM IRMNSPC.dbo.[TEST_DAT], IRMNSPC.dbo.[SGRP_EXT], IRMNSPC.dbo.[PART_LOT] "). Append(" WHERE TEST_DAT.F_Test = SGRP_EXT.F_Test "). Append(" AND SGRP_EXT.F_LOT = PART_LOT.F_LOT "). Append(" AND SGRP_EXT.F_FLAG IN (0) "). Append(" AND PART_LOT.F_NAME = '$LotId$' "). Append(" /* AND PART_LOT.F_NAME = '0302435hvfet' Example */ "). Append(" ORDER BY TEST_DAT.F_NAME, SGRP_EXT.F_TSNO, SGRP_EXT.F_VAL DESC "); sql.Replace("$LotId$", lotId); return GetIqsData112(connectionString, sql); } private static List GetIqsData112(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new IqsData112(sqlReader)); } } } return results; } } public class IqsData322 { public object Run_number { get; set; } public object Part_number { get; set; } public IqsData322(SqlDataReader sqlReader) { Run_number = sqlReader.GetSqlValue(0); Part_number = sqlReader.GetSqlValue(1); } public static List GetIqsData322(string connectionString, string lotId) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" SELECT "). Append(" [Run Number], [Part Number] "). Append(" FROM G4Wafers_01.dbo.[Prerun Info] "). Append(" WHERE [Run Number] = '$LotId$' "). Append(" /* WHERE [Run Number] = '6903059etch' Example */ "); sql.Replace("$LotId$", lotId); return GetIqsData322(connectionString, sql); } private static List GetIqsData322(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new IqsData322(sqlReader)); } } } return results; } } public class IqsData363 { public object Test_name { get; set; } public object F_val { get; set; } public object F_name { get; set; } public object F_tsno { get; set; } public IqsData363(SqlDataReader sqlReader) { Test_name = sqlReader.GetSqlValue(0); F_val = sqlReader.GetSqlValue(1); F_name = sqlReader.GetSqlValue(2); F_tsno = sqlReader.GetSqlValue(3); } public static List GetIqsData363(string connectionString, string lotId) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" SELECT "). Append(" TEST_DAT.F_NAME AS TEST_NAME, SGRP_EXT.F_VAL, DESC_DAT.F_NAME, SGRP_EXT.F_TSNO "). Append(" FROM IRMNSPC.dbo.[SGRP_EXT], IRMNSPC.dbo.[TEST_DAT], IRMNSPC.dbo.[SGRP_DSC], IRMNSPC.dbo.[DESC_DAT], IRMNSPC.dbo.[DESC_GRP] "). Append(" WHERE SGRP_EXT.F_Test = TEST_DAT.F_Test "). Append(" AND SGRP_EXT.F_SGRP = SGRP_DSC.F_SGRP "). Append(" AND SGRP_DSC.F_DESC = DESC_DAT.F_DESC "). Append(" AND DESC_GRP.F_DSGP = DESC_DAT.F_DSGP "). Append(" AND DESC_GRP.F_NAME IN ('Wafer ID') "). Append(" AND SGRP_EXT.F_LOT IN ( "). Append(" SELECT F_LOT "). Append(" FROM IRMNSPC.dbo.[PART_LOT] "). Append(" WHERE F_NAME = '$LotId$' "). Append(" /* WHERE F_NAME = '0302435hvfet' Example */ "). Append(" ) "). Append(" UNION "). Append(" SELECT "). Append(" TEST_DAT.F_NAME AS TEST_NAME, SGRP_EXT.F_VAL, ' ' AS F_NAME, SGRP_EXT.F_TSNO "). Append(" FROM IRMNSPC.dbo.[TEST_DAT], IRMNSPC.dbo.[SGRP_EXT], IRMNSPC.dbo.[PART_LOT] "). Append(" WHERE TEST_DAT.F_Test = SGRP_EXT.F_Test "). Append(" AND SGRP_EXT.F_LOT = PART_LOT.F_LOT "). Append(" AND PART_LOT.F_NAME = '$LotId$' "). Append(" /* AND PART_LOT.F_NAME = '0302435hvfet' Example */ "). Append(" ORDER BY TEST_DAT.F_NAME, SGRP_EXT.F_TSNO, SGRP_EXT.F_VAL DESC "); sql.Replace("$LotId$", lotId); return GetIqsData363(connectionString, sql); } private static List GetIqsData363(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new IqsData363(sqlReader)); } } } return results; } } public class IqsData488 { public object Run_number { get; set; } public object Part_number { get; set; } public IqsData488(SqlDataReader sqlReader) { Run_number = sqlReader.GetSqlValue(0); Part_number = sqlReader.GetSqlValue(1); } public static List GetIqsData488(string connectionString, string lotId) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" SELECT "). Append(" [Run Number], [Part Number] "). Append(" FROM G4Wafers_01.dbo.[Prerun Info] "). Append(" WHERE [Run Number] = '$LotId$' "). Append(" /* WHERE [Run Number] = '6903059etch' Example */ "); sql.Replace("$LotId$", lotId); return GetIqsData488(connectionString, sql); } private static List GetIqsData488(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new IqsData488(sqlReader)); } } } return results; } } } namespace SectionELotSummaryReport { public class RecipeInfo { public object Run_number { get; set; } public object Pocket_number { get; set; } public object Recipe { get; set; } public object Wafer_lot { get; set; } public RecipeInfo(SqlDataReader sqlReader) { Run_number = sqlReader.GetSqlValue(0); Pocket_number = sqlReader.GetSqlValue(1); Recipe = sqlReader.GetSqlValue(2); Wafer_lot = sqlReader.GetSqlValue(3); } public static List GetRecipeInfo(string connectionString, string runNumber, string pocketNumber) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(" SELECT "). Append(" [Run Number], pocket_number, recipe, wafer_lot "). Append(" FROM G4Wafers_01.dbo.[Prerun Info] "). Append(" WHERE [Run Number] = '$runNumber$' "). Append(" /* WHERE [Run Number] = '6903059etch' Example */ "). Append(" AND pocket_number = '$pocketNumber$' "). Append(" /* AND pocket_number = '01' Example */ "); sql.Replace("$runNumber$", runNumber).Replace("$pocketNumber$", pocketNumber); return GetRecipeInfo(connectionString, sql); } private static List GetRecipeInfo(string connectionString, StringBuilder sql) { List results = new List(); string cmdText = sql.ToString(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand sqlComm = new SqlCommand(cmdText, conn)) { using (SqlDataReader sqlReader = sqlComm.ExecuteReader()) { while (sqlReader.Read()) results.Add(new RecipeInfo(sqlReader)); } } } return results; } } } }