// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-#if NET_2_0
using System;
using System.CodeDom;
[ExpressionPrefix("ConnectionStrings")]
public class ConnectionStringsExpressionBuilder : ExpressionBuilder {
- public override object EvaluateExpression (object target, BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
+ public override object EvaluateExpression (object target, BoundPropertyEntry entry,
+ object parsedData, ExpressionBuilderContext context)
{
return GetConnectionString (entry.Expression.Trim());
}
- public override CodeExpression GetCodeExpression (BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
- {
- throw new NotImplementedException ();
+ public override CodeExpression GetCodeExpression (BoundPropertyEntry entry, object parsedData,
+ ExpressionBuilderContext context)
+ {
+ Pair connString = parsedData as Pair;
+ return new CodeMethodInvokeExpression (
+ new CodeTypeReferenceExpression (typeof (ConnectionStringsExpressionBuilder)),
+ (bool)connString.Second ? "GetConnectionStringProviderName" : "GetConnectionString",
+ new CodeExpression [] {new CodePrimitiveExpression (connString.First)}
+ );
}
public static string GetConnectionString (string connectionStringName)
{
ConnectionStringSettings conn = WebConfigurationManager.ConnectionStrings [connectionStringName];
if (conn == null)
- return "";
+ return String.Empty;
else
return conn.ConnectionString;
}
{
ConnectionStringSettings conn = WebConfigurationManager.ConnectionStrings [connectionStringName];
if (conn == null)
- return "";
+ return String.Empty;
else
return conn.ProviderName;
}
- [MonoTODO ("Not implemented")]
public override object ParseExpression (string expression, Type propertyType, ExpressionBuilderContext context)
{
- throw new NotImplementedException ();
+ bool wantsProviderName = false;
+ string connStringName = String.Empty;
+
+ if (!String.IsNullOrEmpty (expression)) {
+ int subidx = expression.Length;
+
+ if (expression.EndsWith (".providername", StringComparison.InvariantCultureIgnoreCase)) {
+ wantsProviderName = true;
+ subidx -= 13;
+ } else if (expression.EndsWith (".connectionstring", StringComparison.InvariantCultureIgnoreCase))
+ subidx -= 17;
+
+ connStringName = expression.Substring (0, subidx);
+ }
+
+ return new Pair (connStringName, wantsProviderName);
}
public override bool SupportsEvaluate {
}
-#endif
+