1 // Licensed to the .NET Foundation under one or more agreements. 2 // The .NET Foundation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System.Collections; 6 using System.IO; 7 using System.Reflection; 8 using System.Text; 9 10 namespace System.Data.SqlClient.ManualTesting.Tests 11 { 12 internal static class UdtTestHelpers 13 { DumpReaderString(SqlDataReader reader)14 internal static string DumpReaderString(SqlDataReader reader) 15 { 16 return DumpReaderString(reader, true); 17 } 18 DumpReaderString(SqlDataReader reader, bool showMetaData)19 internal static string DumpReaderString(SqlDataReader reader, bool showMetaData) 20 { 21 int i; 22 int x = 0, y = 0; 23 double d; 24 object o = 0; 25 bool fNull; 26 StringBuilder builder = new StringBuilder(); 27 28 if (showMetaData) 29 { 30 for (i = 0; i < reader.FieldCount; i++) 31 { 32 builder.AppendLine($"ColumnName[{i}] = {reader.GetName(i)}"); 33 builder.AppendLine($"DataType[{i}] = {reader.GetDataTypeName(i)}"); 34 builder.AppendLine($"FieldType[{i}] = {reader.GetFieldType(i)}"); 35 } 36 } 37 38 while (reader.Read()) 39 { 40 for (i = 0; i < reader.FieldCount; i++) 41 { 42 if (i > 0) 43 { 44 builder.Append(", "); 45 } 46 47 object fieldValue = reader.GetValue(i); 48 49 if (fieldValue is Point) 50 { 51 fNull = (bool)fieldValue.GetType().InvokeMember("IsNull", BindingFlags.GetProperty, null, fieldValue, null); 52 if (!fNull) 53 { 54 x = (int)fieldValue.GetType().InvokeMember("X", BindingFlags.GetProperty, null, fieldValue, null); 55 y = (int)fieldValue.GetType().InvokeMember("X", BindingFlags.GetProperty, null, fieldValue, null); 56 d = (double)fieldValue.GetType().InvokeMember("Distance", BindingFlags.Public | BindingFlags.Default | BindingFlags.Instance | BindingFlags.InvokeMethod, null, fieldValue, new Object[] { }); 57 builder.Append(string.Format("p.X = {0,3}, p.Y = {1,3}, p.Distance() = {2}", x, y, d)); 58 } 59 else 60 { 61 builder.Append("null"); 62 } 63 } 64 else if (fieldValue is Circle) 65 { 66 fNull = (bool)fieldValue.GetType().InvokeMember("IsNull", BindingFlags.GetProperty, null, fieldValue, null); 67 if (!fNull) 68 { 69 o = fieldValue.GetType().InvokeMember("Center", BindingFlags.Public | BindingFlags.Default | BindingFlags.Instance | BindingFlags.GetProperty, null, fieldValue, new Object[] { }); 70 builder.Append("Center = " + o); 71 } 72 } 73 else 74 { 75 builder.Append(string.Format("{0,10}", fieldValue.ToString())); 76 } 77 } 78 builder.AppendLine(); 79 } 80 return builder.ToString(); 81 } 82 } 83 } 84