コード例 #1
0
        protected override Type GetSystemType(string dataType, string columnType, DataTypeInfo dataTypeInfo, long?length, int?precision, int?scale)
        {
            switch (dataType)
            {
            case "tinyint": return(typeof(byte));

            case "hierarchyid":
            case "geography":
            case "geometry": return(SqlServerDataProvider.GetUdtType(dataType));
            }

            return(base.GetSystemType(dataType, columnType, dataTypeInfo, length, precision, scale));
        }
コード例 #2
0
        public SqlServerMappingSchema()
            : base(ProviderName.SqlServer)
        {
            SetConvertExpression <SqlXml, XmlReader>
            (
                s => s.IsNull ? DefaultValue <XmlReader> .Value : s.CreateReader(),
                s => s.CreateReader()
            );

            SetConvertExpression <string, SqlXml>(s => new SqlXml(new MemoryStream(Encoding.UTF8.GetBytes(s))));

            AddScalarType(typeof(SqlBinary), SqlBinary.Null, true, DataType.VarBinary);
            AddScalarType(typeof(SqlBoolean), SqlBoolean.Null, true, DataType.Boolean);
            AddScalarType(typeof(SqlByte), SqlByte.Null, true, DataType.Byte);
            AddScalarType(typeof(SqlDateTime), SqlDateTime.Null, true, DataType.DateTime);
            AddScalarType(typeof(SqlDecimal), SqlDecimal.Null, true, DataType.Decimal);
            AddScalarType(typeof(SqlDouble), SqlDouble.Null, true, DataType.Double);
            AddScalarType(typeof(SqlGuid), SqlGuid.Null, true, DataType.Guid);
            AddScalarType(typeof(SqlInt16), SqlInt16.Null, true, DataType.Int16);
            AddScalarType(typeof(SqlInt32), SqlInt32.Null, true, DataType.Int32);
            AddScalarType(typeof(SqlInt64), SqlInt64.Null, true, DataType.Int64);
            AddScalarType(typeof(SqlMoney), SqlMoney.Null, true, DataType.Money);
            AddScalarType(typeof(SqlSingle), SqlSingle.Null, true, DataType.Single);
            AddScalarType(typeof(SqlString), SqlString.Null, true, DataType.NVarChar);
            AddScalarType(typeof(SqlXml), SqlXml.Null, true, DataType.Xml);

            try
            {
                foreach (var typeInfo in new[]
                {
                    new { Type = SqlServerTools.SqlHierarchyIdType, Name = "SqlHierarchyId" },
                    new { Type = SqlServerTools.SqlGeographyType, Name = "SqlGeography" },
                    new { Type = SqlServerTools.SqlGeometryType, Name = "SqlGeometry" },
                })
                {
                    var type = typeInfo.Type ?? Type.GetType("Microsoft.SqlServer.Types.{0}, Microsoft.SqlServer.Types".Args(typeInfo.Name));

                    if (type == null)
                    {
                        continue;
                    }

                    var p = type.GetProperty("Null");
                    var l = Expression.Lambda <Func <object> >(
                        Expression.Convert(Expression.Property(null, p), typeof(object)));

                    var nullValue = l.Compile()();

                    AddScalarType(type, nullValue, true, DataType.Udt);

                    SqlServerDataProvider.SetUdtType(type, typeInfo.Name.Substring(3).ToLower());
                }
            }
            catch
            {
            }

            SetValueToSqlConverter(typeof(String), (sb, dt, v) => ConvertStringToSql(sb, dt, v.ToString()));
            SetValueToSqlConverter(typeof(Char), (sb, dt, v) => ConvertCharToSql(sb, dt, (char)v));
            SetValueToSqlConverter(typeof(DateTime), (sb, dt, v) => ConvertDateTimeToSql(sb, (DateTime)v));
            SetValueToSqlConverter(typeof(TimeSpan), (sb, dt, v) => ConvertTimeSpanToSql(sb, dt, (TimeSpan)v));
            SetValueToSqlConverter(typeof(DateTimeOffset), (sb, dt, v) => ConvertDateTimeOffsetToSql(sb, dt, (DateTimeOffset)v));
            SetValueToSqlConverter(typeof(byte[]), (sb, dt, v) => ConvertBinaryToSql(sb, (byte[])v));
            SetValueToSqlConverter(typeof(Binary), (sb, dt, v) => ConvertBinaryToSql(sb, ((Binary)v).ToArray()));

            SetDataType(typeof(string), new SqlDataType(DataType.NVarChar, typeof(string), int.MaxValue));
        }
コード例 #3
0
 public SqlServerBulkCopy(SqlServerDataProvider dataProvider)
 {
     _dataProvider = dataProvider;
 }