Thursday, July 27, 2017

null-coalescing operator ?? double question-mark

The ?? operator is called the null-coalescing operator. It returns the left-hand operand if the operand is not null; otherwise it returns the right hand operand.

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operator

(also see:  https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators )

not to be confused with:
The conditional operator (?:) returns one of two values depending on the value of a Boolean expression. Following is the syntax for the conditional operator.

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-operator


There's another more generalized name for this kind of expression, but I cannot recall what it is.  I think I have another page about it somewhere. TERNARY!  ternary operator ....  

ternary because it is composed of "3 parts".


var  thingamajig= Request.QueryString["thingamajig"] ?? Request.Form["thingamajig"];


Sunday, July 23, 2017

Generic all-purpose HTML table from SQL reader (Version 2.0)

            string output = "";
            int debugColnumber = 0;
            int debugRecordnumber = 0;

                               
            using (SqlConnection cn = new SqlConnection(DBConnection.getDBConnection()))
            {
                SqlCommand cmd = new SqlCommand(sql, cn);
                cmd.CommandType = System.Data.CommandType.Text;


                try
                {
                   
                    cn.Open();
                    SqlDataReader reader = cmd.ExecuteReader();

                    var columns = new List<string>();
                 

                    output =  "<table><tr>";
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        columns.Add(reader.GetName(i));
                        output += "<th>" + reader.GetName(i) + "</th>";
                    }
                    output += "</tr>";
                   
                    while (reader.Read())
                    {
                        debugRecordnumber++;
                     
                        output += "<tr>";
                        for (int i = 0; i < reader.FieldCount; i++)
                        {
                            debugColnumber++;
                            var dotNetType = reader.GetFieldType(i).Name;
                            var sqlType = reader.GetDataTypeName(i);
                            var myType = reader.GetType().ToString();

                           
                            if (reader.IsDBNull(i))
                            {
                                output += "<td></td>";
                            }
                            else
                            {
                               
                                switch (reader.GetFieldType(i).Name)
                                {
                                    case "Boolean":
                                        output += "<td>" + reader.GetBoolean(i).ToString() + "</td>";
                                        break;
                                    case "String":
                                        output += "<td>" + reader.GetString(i) + "</td>";
                                        break;
                                    case "Double":
                                        output += "<td>" + reader.GetDouble(i).ToString() + "</td>";
                                        break;
                                    case "Decimal":
                                        output += "<td>" + reader.GetDecimal(i).ToString() + "</td>";
                                        break;
                                    case "Date":
                                        //todo
                                        break;
                                    case "int":
                                        //todo
                                        break;
                                    default:
                                        output += "<td>" + reader.GetFieldType(i).Name + "</td>";
                                        break;
                                }
                            }
                           
                        }
                        output += "</tr>";

                     
                    }
                    output += "</table>";