Quantcast
Channel: Windows Forms Data Controls and Databinding forum
Viewing all articles
Browse latest Browse all 2535

How to Add DataGridViewRow directly from SqlDataReader

$
0
0

I'm new to C# and working with some code I inherited and noticed a performance issue.  This code is looping multiple times on each column (the application selects a file and this code gets the selected columns for that file and adds to rows to datagridview).  I suspect it's because it's reading the SQLDATAREADER in a WHILE LOOP and while in that loop executes a FOREACH LOOP.

My question is: how can I reduce this to one loop and add rows directly from the SQLDATAREADER as it's read?

My Code:

        private void getAttributeSIDs()
        {
            String Sta3n = cbRegionSites.SelectedItem.ToString().Substring(1, 3);
            String fileNum = tvFileMan.SelectedNode.Tag.ToString();
            SqlConnection cdw = new SqlConnection(ConfigurationManager.ConnectionStrings["CDW"].ConnectionString);
            cdw.Open();
            SqlCommand cmd = new SqlCommand("SELECT VistaFieldNumber,VistaFieldSID,FieldType,FieldLength,WholeNumberDigits,DecimalDigits,PointsToFileNumber FROM CDWWork.Dim.VistaField WHERE VistaFileNumber='" + fileNum + "' AND Sta3n=" + Sta3n, cdw);
            SqlDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                String fieldNumber = rdr[0].ToString();
                foreach (DataGridViewRow dr in dgvColumns.Rows)
                {
                    if (dr.IsNewRow) break;
                    if (dr.Cells["FMFieldNumber"].Value.ToString() == fieldNumber)
                    {
                    //Begin 1
                        dr.Cells["SourceAttributeSID"].Value = rdr[1].ToString();
                        dr.Cells["FMFieldType"].Value = rdr["FieldType"].ToString();
                        switch (rdr["FieldType"].ToString())
                        {
                            case "FreeText":
                                //Code
                                dr.Cells["DWFieldDataType"].Value = "varchar";
                                dr.Cells["DWFieldLength"].Value = rdr["FieldLength"].ToString();
                                dr.Cells["FMFieldLength"].Value = rdr["FieldLength"].ToString();
                                break;
                            case "Numeric":
                                int whole;
                                int tdecimal;
                                whole = Convert.ToInt32(rdr["WholeNumberDigits"]);
                                tdecimal = Convert.ToInt32(rdr["DecimalDigits"]);
                                dr.Cells["DWFieldDataType"].Value="int";
                                //if (rdr["DecimalDigits"].ToString().Length > 0 )
                                if (tdecimal > 0)
                                { 
                                    dr.Cells["DWFieldDataType"].Value = "numeric"; 
                                }
                                else
                                {
                                    dr.Cells["DWFieldDataType"].Value = "int";
                                }
                                    dr.Cells["DWFieldLength"].Value = rdr["WholeNumberDigits"];
                                    dr.Cells["DWFieldScale"].Value = rdr["DecimalDigits"];
                                break;
                            case "Pointer":
                                dr.Cells["DWFieldDataType"].Value = "varchar";
                                dr.Cells["DWFieldLength"].Value = "50";
                                dr.DefaultCellStyle.BackColor = Color.Aqua; 
                                dr.Cells["PointsToFileNumber"].Value = rdr["PointsToFileNumber"];
                            //change Suggested Column name for pointers
                            dr.Cells["ColumnName"].Value = dr.Cells["ColumnName"].Value + "F" + (rdr["PointsToFileNumber"].ToString().Replace(".", "x")) + "IEN";
                            //dr.DefaultCellStyle.BackColor = Color.Aqua; 
                                break;
                            case "SetOfCodes":
                                dr.Cells["DWFieldDataType"].Value = "varchar";
                                dr.Cells["DWFieldLength"].Value = "500";
                                break;
                            case "Date":
                                dr.Cells["DWFieldDataType"].Value = "Date";

                                break;
                            case "DateTime":
                                dr.Cells["DWFieldDataType"].Value = "DateTime";

                                break;
                            case "Computed":
                                cbComputed.Checked = true;
                                dr.DefaultCellStyle.BackColor = Color.Red;
                                break;
                             default:
                                //Code
                                dr.Cells["DWFieldDataType"].Value = "varchar";
                                break;
                        }  //End Switch
                    }  //End if
                } //End ForEach
            }  //End While
            rdr.Close();
            rdr.Dispose();
            cmd.Dispose();
            cdw.Close();
            cdw.Dispose();
        }



Viewing all articles
Browse latest Browse all 2535

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>