Вопрос

Как получить из UserConnection connectingString

Приветствую, Коллеги,

Написал в студии код обращения к процедуре в MS SQL через ADO.Net, начал создавать веб сервис в конфигурации, однако, для sqlcommand необходим через SqlConnection которой нужен connectingString. Вопрос из UserConnection как то можно получить connectingString, насколько я понял через это UserConnection UserConnection = (UserConnection)HttpContext.Current.Session["UserConnection"] - как раз осуществляет обращение в объектам БД, значит она содержит где то connectingString не могу понять как его получить.

Памагите!!

Нравится

7 комментариев
Лучший ответ

Для этого лучше использовать Terrasoft.Core.DB.StoredProcedure

Пример:

var storedProcedure = new StoredProcedure(UserConnection, "YouStoredProcedureName");
storedProcedure.WithParameter("Action", action);
storedProcedure.WithParameter("RecordId", recordId);
storedProcedure.WithParameter("SysAdminUnitId", sysAdminUnitId);
storedProcedure.Execute();

 

Для этого лучше использовать Terrasoft.Core.DB.StoredProcedure

Пример:

var storedProcedure = new StoredProcedure(UserConnection, "YouStoredProcedureName");
storedProcedure.WithParameter("Action", action);
storedProcedure.WithParameter("RecordId", recordId);
storedProcedure.WithParameter("SysAdminUnitId", sysAdminUnitId);
storedProcedure.Execute();

 

Как вычитаться в этом случаи результат работы процедуры? В моем случаи процедура возращает Guid, который будет использоваться дальше

 

По возврату параметра (только у Вас тип параметра будет «Guid» вместо «Boolean»):

StoredProcedure setRecordPositionProcedure = new StoredProcedure(UserConnection, "tsp_DeleteStorageDocumentTransaction")
					.WithParameter("StorageDocumentId", entity.PrimaryColumnValue.ToString("D"))
					.WithParameter("TypeId", typeCollection[typeId])
					.WithOutputParameter("OperationCanceled", UserConnection.DataValueTypeManager.GetInstanceByName("Boolean")) as StoredProcedure;
				setRecordPositionProcedure.PackageName = UserConnection.DBEngine.SystemPackageName;
				setRecordPositionProcedure.Execute();
				operationCanceled = (bool)setRecordPositionProcedure.Parameters.GetByName("OperationCanceled").Value;

По изначальному вопросу, вот пример кода, получающий  ConnectionString:

public static SqlConnection GetSqlConnection(this UserConnection userConnection) {
	var dbConfigurationSectionGroup =
		userConnection.AppConnection.AppSettings.DBConfigurationSectionGroup as DBConfigurationSectionGroup;
	var connectionStringName = (dbConfigurationSectionGroup != null)
		? dbConfigurationSectionGroup.GeneralSection.ConnectionStringName
		: "db";
 
	var connectionString =
		userConnection.AppConnection.AppSettings.RootConfiguration.ConnectionStrings.ConnectionStrings[connectionStringName]
			.ConnectionString;
 
	var connection = new SqlConnection(connectionString);
	return connection;
}

 

Зверев Александр,

 Приветствую, переделал, с учетом ваших комментариев однако все равно падает но не могу понять почему: сам класс + метод выглядит так:

--------------------------------------------------------------------------------------

namespace Terrasoft.Configuration

{

using System;

using System.Collections.Generic;

using System.Globalization;

using System.IO;

using System.Linq;

using System.Net;

using System.Web;

using System.Threading;

using System.ServiceModel;

using System.ServiceModel.Activation;

using System.ServiceModel.Web;

using Terrasoft.Core;

using Terrasoft.Core.DB;

using Terrasoft.Core.Entities;

using Terrasoft.Common;

using Terrasoft.Configuration;

using System.Data.SqlClient;

using System.Data;

    [ServiceContract]

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

public class UsrCustomConfigurationService

    {

        // Метод, возвращающий идентификатор контакта по его имени.

        [OperationContract]

        [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,

        ResponseFormat = WebMessageFormat.Json)]

        public string GetContactIdByName() {

            

            var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];

            var dbConfigurationSectionGroup = userConnection.AppConnection.AppSettings.DBConfigurationSectionGroup as DBConfigurationSectionGroup;

            var connectionStringName = (dbConfigurationSectionGroup != null) ? dbConfigurationSectionGroup.GeneralSection.ConnectionStringName : "db";

 

            var connectionString = userConnection.AppConnection.AppSettings.RootConfiguration.ConnectionStrings.ConnectionStrings[connectionStringName].ConnectionString;

            

            

            SqlConnection connect = new SqlConnection(connectionString);

            

            connect.Open();

            

            SqlDataReader reader = null;

            //SqlCommand command = new SqlCommand("exec Substitution_Get_Replaced_v5 @id,@cfo",connect);

            SqlCommand command = new SqlCommand("select [Name] from Contact with(nolock) where id='5A9A1767-AD48-4320-8F6B-07801F914A7A'");

              //command.Parameters.AddWithValue("id", Replaced);

              //command.Parameters.AddWithValue("cfo", "");

            try

            {

                reader = command.ExecuteReader();

                if (reader.Read())

                {

                    return reader["[Name]"].ToString();

                }

                return "";

            }

            catch (Exception e)

            {

                return e.InnerException.Message;

            }

        }

    }

}

--------------------------------------Ошибка которую возвращает-------------------

The server encountered an error processing the request. The exception message is 'Object reference not set to an instance of an object.'. See server logs for more details. The exception stack trace is:

at Terrasoft.Configuration.UsrCustomConfigurationService.GetContactIdByName() at SyncInvokeGetContactIdByName(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

Станислав Кудрявцев,

Уточнить проблемное место вам поможет только отладка!

Хочу отметить, что использование SqlCommand плохой стиль все тоже самое можно получить через классы Террасофт для работы с данными: CustomQuery, StoredProcedure, Select и тд

Григорий Чех,

 

В таком случае подскажите как вернуть результат функции postgresql, которая возвращает таблицу, используя классы Terrasoft.

в sdk не могу найти класс StoredProcedure, и в примера особо похожего тоже найти не могу

Александр, StoredProcedure тоже есть, но Вам надо UserDefinedFunction. См. тут.

Показать все комментарии