C # подключить приложение WinForm, работающее локально через удаленный рабочий стол (или другой) к базе данных - PullRequest
3 голосов
/ 10 октября 2019

РЕДАКТИРОВАТЬ

RDP - это просто текущий способ, которым я делаю это, если есть другой способ подключения к базе данных в другой среде, я сделаю это. В идеале я хочу, чтобы это подключалось к базе данных, как если бы исполняемый файл находился в среде RDP, и не показывало никаких признаков подключения к БД через другую среду.

РЕДАКТИРОВАТЬ 2

Я также попытался добавить вторую строку подключения и открыть ее, после чего сразу после этого появилась моя текущая строка подключения.


У меня есть приложение C # Win Forms, которое подключается кбазы данных, это прекрасно работает, за исключением того, что мне нужно RDP в правильную среду и запустить исполняемый файл оттуда для этого.

Можно ли установить RDP-соединение внутри приложения, а затем подключиться к базе данных безнеобходимость иметь исполняемый файл внутри RDP.

Я попытался создать строку подключения, используя библиотеку MSTSCLib, которую я обнаружил здесь , однако это все равно не работает на уровне кода.

Код:

    private void rdpConnect_Click(object sender, EventArgs e)
    {
        MSTerminalServiceControl1.Server = rdpServer.Text;
        MSTerminalServiceControl1.UserName = rdpUserName.Text;
        IMsTscNonScriptable secured = (IMsTscNonScriptable)MSTerminalServiceControl1.GetOcx();
        secured.ClearTextPassword = rdpPassword.Text;
        MSTerminalServiceControl1.Connect();
    }

    private void rdpDisconnect_Click(object sender, EventArgs e)
    {
        MSTerminalServiceControl1.Disconnect();
    }

Текущий путь:

enter image description here

Желаемый путь:

enter image description here

Ответы [ 5 ]

1 голос
/ 21 октября 2019

Я видел, как сетевой администратор настроил наше обычное приложение winform для удаленного открытия через the Internet с использованием Citrix. Мы внесли без изменений в исполняемый файл. Он запустит приложение в Citrix Virtual Server.

. Проблема в том, что это платное программное обеспечение.

1 голос
/ 20 октября 2019

Если у вас есть файл app.config для исполняемого файла, обновите параметр строки подключения, чтобы он указывал на ip сервера rdp. Перед этим включите порт базы данных на брандмауэре, а также включите удаленные подключения к базе данных. Для mssql сервера. Запустите менеджер конфигурации сервера sql. Выберите экземпляр базы данных. Включите tcp / ip в конфигурации сети. Под вкладкой io address. Установите для порта tcp значение 1443. Перезапустите экземпляр.

Источник данных = IP, 1443 \ dbservername;Я надеюсь, что это может быть отправной точкой.

1 голос
/ 18 октября 2019

Я уверен, что это не может работать, потому что ...

RDP (протокол удаленного рабочего стола) - это протокол для подключения вас с удаленного компьютера к сеансу на сервере терминалов. Это цель. В этом сеансе вы можете запускать программы, открывать документы и выполнять свою работу. Как будто ты сидел перед этой машиной. Преимущество состоит в том, что это может быть сделано несколькими пользователями, в зависимости только от количества пользовательских лицензий и мощности оборудования.

Существуют некоторые особые случаи, например, вы можете запускать программу автоматически при запуске. Тогда ваш сеанс ограничен этой программой и закончится, когда программа закончится. Но это только ограничение. Для этого вы все равно начнете сеанс.

Кроме того, в каждой версии Windows есть не только версия сервера терминалов, но и не только серверы. Это можно использовать для удаленного подключения таким же образом.

Так что, к сожалению, RDP не может подключиться к базе данных. Никоим образом не. Вам нужна программа для этого. Вы можете построить локальную программу с RDP-клиентом внутри. Это может подключиться к сеансу на удаленной машине и запустить другую программу, которая подключается к базе данных. Но у вас не будет связи между программами по умолчанию, поэтому нет никакой выгоды.

Я думаю, что, как говорили другие, лучше всего напрямую подключиться к базе данных.

1 голос
/ 20 октября 2019

Вам нужно подключить несколько пользователей sql к одной базе данных и не использовать RDP.

вы должны написать специальную строку подключения для каждого пользователя, как показано ниже:

using System.Data.SqlClient;

SqlConnection conn = new SqlConnection();
conn.ConnectionString =
    "Data Source=ServerName;" +
    "Initial Catalog=DataBaseName;" +
    "User id=" + UserName + ";"
    "Password=" + Password + ";";
 conn.Open();

Поместите это в класс, который принимает имя пользователя и пароль.

Полный пример:

class myConnection
{
    public static SqlConnection GetConnection(string UserName, string Password)
    {
        string str = "Data Source=ServerName;Initial Catalog=DataBaseName;User id=" +             
        UserName + ";Password=" + Password + ";";
        SQlConnection con = new SqlConnection(str);
        con.Open();
        return con;
    }
}

Затем подключите каждого пользователя к БД напрямую.

1 голос
/ 10 октября 2019

Похоже, у вас нет ссылок на элемент управления ActiveX.

В вашей панели инструментов выберите COM-компонент: Microsoft RDP Control - версия x

Версия здесь важна, она должна соответствоватьУстановленная версия RDP, после того, как вы добавили ее в свой ящик для инструментов, добавьте ее в форму, если есть несоответствие версий, это приведет к ошибке. Я бы сказал, начать с последней версии элемента управления и идти вниз, пока вы не сможете успешно добавить его в свою форму. MSTerminalServiceControl1 в вашем коде на самом деле является названием этого элемента управления, который вы должны таким образом поместить в форму.

...