/Ximura Data Persistence/Persistence Managers/SQLDB Based/SQLDBPersistenceManager_ResolveReference.cs
C# | 198 lines | 164 code | 24 blank | 10 comment | 12 complexity | 5d5a84326d910da1a4d6bc35237c661a MD5 | raw file
- #region Copyright
- // *******************************************************************************
- // Copyright (c) 2000-2009 Paul Stancer.
- // All rights reserved. This program and the accompanying materials
- // are made available under the terms of the Eclipse Public License v1.0
- // which accompanies this distribution, and is available at
- // http://www.eclipse.org/legal/epl-v10.html
- //
- // Contributors:
- // Paul Stancer - initial implementation
- // *******************************************************************************
- #endregion
- #region using
- using System;
- using System.ComponentModel;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.IO;
- using System.Text;
- using System.Data;
- using System.Data.Common;
- using System.Data.SqlClient;
- using System.Reflection;
- using System.Transactions;
- using System.Data.SqlTypes;
-
- using Ximura;
- using Ximura.Data;
- using Ximura.Data;
- using Ximura.Framework;
- using Ximura.Framework;
-
- using CH = Ximura.Common;
- using AH = Ximura.AttributeHelper;
- #endregion
- namespace Ximura.Data
- {
- public partial class SQLDBPersistenceManager<CONT, DCONT>
- {
- protected override bool ResolveReference(CDSContext context)
- {
- string strConn = SQLConnectionResolve(context);
- Guid? typeID = context.Request.DataTypeID;
- if (!typeID.HasValue)
- typeID = context.Request.DataType.GetContentTypeAttributeID();
-
- object vid = null;
- object cid = null;
- object tid = null;
-
- try
- {
- using (SqlConnection sqlConn = new SqlConnection(strConn))
- {
- sqlConn.Open();
- SqlCommand sqlCmd = new SqlCommand("EntityResolveReference", sqlConn);
- sqlCmd.CommandType = CommandType.StoredProcedure;
-
- sqlCmd.Parameters.Add("@TypeID", SqlDbType.UniqueIdentifier).Value = typeID.Value;
- sqlCmd.Parameters.Add("@RefType", SqlDbType.VarChar, 50).Value = context.Request.DataReferenceType;
- sqlCmd.Parameters.Add("@RefValue", SqlDbType.NVarChar, 255).Value = context.Request.DataReferenceValue;
-
- SqlParameter paramStatus = new SqlParameter();
- paramStatus.ParameterName = "@Status";
- paramStatus.SqlDbType = SqlDbType.Int;
- paramStatus.IsNullable = true;
- paramStatus.Direction = ParameterDirection.InputOutput;
- paramStatus.Value = System.DBNull.Value;
- sqlCmd.Parameters.Add(paramStatus);
-
- SqlParameter paramSubstatus = new SqlParameter();
- paramSubstatus.ParameterName = "@Substatus";
- paramSubstatus.SqlDbType = SqlDbType.NVarChar;
- paramSubstatus.Size = 100;
- paramSubstatus.IsNullable = true;
- paramSubstatus.Direction = ParameterDirection.InputOutput;
- paramSubstatus.Value = System.DBNull.Value;
- sqlCmd.Parameters.Add(paramSubstatus);
-
- SqlParameter paramReturnValue = new SqlParameter();
- paramReturnValue.ParameterName = "@Return_Value";
- paramReturnValue.SqlDbType = SqlDbType.Int;
- paramReturnValue.Direction = ParameterDirection.ReturnValue;
- sqlCmd.Parameters.Add(paramReturnValue);
-
- using (SqlDataReader reader = sqlCmd.ExecuteReader())
- {
- if (reader.HasRows)
- {
- reader.Read();
- vid = reader.GetSqlValue(0);
- cid = reader.GetSqlValue(1);
- tid = reader.GetSqlValue(2);
- }
- reader.Close();
- }
-
- int response = (int)paramStatus.Value;
-
- if (response == 200)
- {
- context.Request.DataVersionID = vid == null ? (Guid?)null : new Guid(vid.ToString());
- context.Request.DataContentID = cid == null ? (Guid?)null : new Guid(cid.ToString());
- context.Request.DataTypeID = tid == null ? (Guid?)null : new Guid(tid.ToString());
- }
- else
- return false;
- }
- }
- catch (NullReferenceException nrefex)
- {
- context.Response.Status = CH.HTTPCodes.InternalServerError_500;
- context.Response.Substatus = nrefex.Message;
- }
- catch (Exception ex)
- {
- context.Response.Status = CH.HTTPCodes.InternalServerError_500;
- context.Response.Substatus = ex.Message;
- }
-
- return true;
- }
-
- protected string ResolveReferenceInternal(string strConn,
- string refType, string refValue, Guid tid, out Guid? cid, out Guid? vid)
- {
- cid = null;
- vid = null;
-
- try
- {
- using (SqlConnection sqlConn = new SqlConnection(strConn))
- {
- sqlConn.Open();
- SqlCommand sqlCmd = new SqlCommand("EntityResolveReference", sqlConn);
- sqlCmd.CommandType = CommandType.StoredProcedure;
-
- sqlCmd.Parameters.Add("@TypeID", SqlDbType.UniqueIdentifier).Value = tid;
- sqlCmd.Parameters.Add("@RefType", SqlDbType.VarChar, 50).Value = refType;
- sqlCmd.Parameters.Add("@RefValue", SqlDbType.NVarChar, 255).Value = refValue;
-
- SqlParameter paramStatus = new SqlParameter();
- paramStatus.ParameterName = "@Status";
- paramStatus.SqlDbType = SqlDbType.Int;
- paramStatus.IsNullable = true;
- paramStatus.Direction = ParameterDirection.InputOutput;
- paramStatus.Value = System.DBNull.Value;
- sqlCmd.Parameters.Add(paramStatus);
-
- SqlParameter paramSubstatus = new SqlParameter();
- paramSubstatus.ParameterName = "@Substatus";
- paramSubstatus.SqlDbType = SqlDbType.NVarChar;
- paramSubstatus.Size = 100;
- paramSubstatus.IsNullable = true;
- paramSubstatus.Direction = ParameterDirection.InputOutput;
- paramSubstatus.Value = System.DBNull.Value;
- sqlCmd.Parameters.Add(paramSubstatus);
-
- SqlParameter paramReturnValue = new SqlParameter();
- paramReturnValue.ParameterName = "@return_value";
- paramReturnValue.SqlDbType = SqlDbType.Int;
- paramReturnValue.Direction = ParameterDirection.ReturnValue;
- sqlCmd.Parameters.Add(paramReturnValue);
-
- object ovid = null;
- object ocid = null;
-
- using (SqlDataReader reader = sqlCmd.ExecuteReader())
- {
- if (reader.HasRows)
- {
- reader.Read();
- ovid = reader.GetSqlValue(0);
- ocid = reader.GetSqlValue(1);
- }
- reader.Close();
- }
-
- int response = (int)paramStatus.Value;
-
- if (response == 200)
- {
- vid = ovid == null ? (Guid?)null : new Guid(ovid.ToString());
- cid = ocid == null ? (Guid?)null : new Guid(ocid.ToString());
- }
- }
- }
- catch (Exception ex)
- {
- return CH.HTTPCodes.InternalServerError_500;
- }
-
- return CH.HTTPCodes.OK_200;
- }
-
- }
- }