2016-08-03 10:59:49 +00:00
|
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
// <copyright file="WebControlParameterProxy.cs" company="Microsoft">
|
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
|
// </copyright>
|
|
|
|
|
//
|
2017-08-21 15:34:15 +00:00
|
|
|
|
// @owner Microsoft
|
2016-08-03 10:59:49 +00:00
|
|
|
|
// @backupOwner objsdev
|
|
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Web.UI.WebControls;
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Globalization;
|
|
|
|
|
|
|
|
|
|
namespace System.Web.UI.WebControls
|
|
|
|
|
{
|
|
|
|
|
internal class WebControlParameterProxy
|
|
|
|
|
{
|
|
|
|
|
ParameterCollection _collection;
|
|
|
|
|
EntityDataSource _entityDataSource;
|
|
|
|
|
Parameter _parameter; // Can be null, that's why this class doesn't subclass Parameter
|
|
|
|
|
|
|
|
|
|
internal WebControlParameterProxy(string propertyName, ParameterCollection parameterCollection, EntityDataSource entityDataSource)
|
|
|
|
|
{
|
|
|
|
|
Debug.Assert(null != entityDataSource);
|
|
|
|
|
Debug.Assert(!String.IsNullOrEmpty(propertyName));
|
|
|
|
|
|
|
|
|
|
_parameter = EntityDataSourceUtil.GetParameter(propertyName, parameterCollection);
|
|
|
|
|
_collection = parameterCollection;
|
|
|
|
|
_entityDataSource = entityDataSource;
|
|
|
|
|
VerifyUniqueType(_parameter);
|
|
|
|
|
}
|
|
|
|
|
internal WebControlParameterProxy(Parameter parameter, ParameterCollection parameterCollection, EntityDataSource entityDataSource)
|
|
|
|
|
{
|
|
|
|
|
Debug.Assert(null != entityDataSource);
|
|
|
|
|
_parameter = parameter;
|
|
|
|
|
_collection = parameterCollection;
|
|
|
|
|
_entityDataSource = entityDataSource;
|
|
|
|
|
VerifyUniqueType(_parameter);
|
|
|
|
|
}
|
|
|
|
|
internal string Name
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (null != _parameter)
|
|
|
|
|
{
|
|
|
|
|
return _parameter.Name;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
internal bool HasValue
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return null != _parameter &&
|
|
|
|
|
null != Value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
internal bool ConvertEmptyStringToNull
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (null != _parameter)
|
|
|
|
|
{
|
|
|
|
|
return _parameter.ConvertEmptyStringToNull;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
internal TypeCode TypeCode
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (null != _parameter)
|
|
|
|
|
{
|
|
|
|
|
return _parameter.Type;
|
|
|
|
|
}
|
|
|
|
|
return TypeCode.Empty;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
internal DbType DbType
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (null != _parameter)
|
|
|
|
|
{
|
|
|
|
|
return _parameter.DbType;
|
|
|
|
|
}
|
|
|
|
|
return DbType.Object;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
internal Type ClrType
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
Debug.Assert(this.TypeCode != TypeCode.Empty || this.DbType != DbType.Object, "Need to have TypeCode or DbType to get a ClrType");
|
|
|
|
|
if (this.TypeCode != TypeCode.Empty)
|
|
|
|
|
{
|
|
|
|
|
return EntityDataSourceUtil.ConvertTypeCodeToType(this.TypeCode);
|
|
|
|
|
}
|
|
|
|
|
return EntityDataSourceUtil.ConvertDbTypeToType(this.DbType);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal object Value
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (_parameter != null)
|
|
|
|
|
{
|
|
|
|
|
object paramValue = EntityDataSourceUtil.GetParameterValue(_parameter.Name, _collection, _entityDataSource);
|
|
|
|
|
|
|
|
|
|
if (paramValue != null)
|
|
|
|
|
{
|
|
|
|
|
if (this.DbType == DbType.DateTimeOffset)
|
|
|
|
|
{
|
|
|
|
|
object value = (paramValue is DateTimeOffset)
|
|
|
|
|
? paramValue
|
|
|
|
|
: DateTimeOffset.Parse(this.Value.ToString(), CultureInfo.CurrentCulture);
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
else if (this.DbType == DbType.Time)
|
|
|
|
|
{
|
|
|
|
|
object value = (paramValue is TimeSpan)
|
|
|
|
|
? paramValue
|
|
|
|
|
: TimeSpan.Parse(paramValue.ToString(), CultureInfo.CurrentCulture);
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
else if (this.DbType == DbType.Guid)
|
|
|
|
|
{
|
|
|
|
|
object value = (paramValue is Guid)
|
|
|
|
|
? paramValue
|
|
|
|
|
: new Guid(paramValue.ToString());
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return paramValue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void VerifyUniqueType(Parameter parameter)
|
|
|
|
|
{
|
|
|
|
|
if (parameter != null && parameter.Type == TypeCode.Empty && parameter.DbType == DbType.Object)
|
|
|
|
|
{
|
|
|
|
|
throw new InvalidOperationException(Strings.WebControlParameterProxy_TypeDbTypeMutuallyExclusive);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (parameter != null && parameter.DbType != DbType.Object && parameter.Type != TypeCode.Empty)
|
|
|
|
|
{
|
|
|
|
|
throw new InvalidOperationException(Strings.WebControlParameterProxy_TypeDbTypeMutuallyExclusive);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|