Запрос удаленного сервера MySql - PullRequest
0 голосов
/ 21 января 2010

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

В настоящее время моя реализация включает построение моего запроса с использованием строителя строк, а затем передачу строки в виде текста команды. Мой вопрос Есть ли лучший способ сделать это. ниже мой код;

  public User LoginSSO(string UserName, Int32 sectorCode)
    {
        using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ComapnyA"].ConnectionString))
        {
            con.Open();

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Select mx.Id, mx.UserName, mx.firstname,mx.surname,mx.sectorCode,");
            sb.AppendLine("mx.deleteFlag, dn.sectorGroupCode, dn.region, dn.district");
            sb.AppendLine("from users mx");
            sb.AppendLine("Inner Join sector dn on dn.sectorCode = mx.sectorCode");
            sb.AppendLine("Where (mx.UserName = '{0}')");

            string commandText = string.Format(sb.ToString(), UserName, sectorCode);

            using (OdbcCommand comm = new OdbcCommand(commandText, con))
            {
                using (OdbcDataReader reader = comm.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        User user = new User();
                        user.Id = Convert.ToInt32(reader["Id"]);
                        user.Username = Convert.ToString(reader["UserName"]);
                        user.Firstname = Convert.ToString(reader["firstname"]);
                        user.Surname = Convert.ToString(reader["surname"]);
                        _dealerGroupCode = Convert.ToString(reader["sectorGroupCode"]);
                        _region = Convert.ToInt32(reader["region"]);
                        _district = Convert.ToInt32(reader["district"]);
                        _dealerCode = dealerCode;
                        _accessLevel = AccessLevel.Sector;

                        return user;
                    }
                }
            }
        }

        return null;
    }

Мне не нравится тот факт, что я создаю свой sql, который в конечном итоге является статическим скриптом. Обратите внимание, что я не могу каким-либо образом управлять удаленным сервером или добавлять к нему какие-либо хранимые процедуры. Для остальной части приложения я использовал LINQ, но я предполагаю, что это не вариант.

Ответы [ 2 ]

0 голосов
/ 26 июня 2012

Вы можете использовать процедуру системного хранилища sp_addlinkedserver для связи с сервером удаленного сервера и запуска запроса. Ниже приведен пример команды.

EXEC sp_addlinkedserver 
 @server = ‘SourceServer’ 
 , @Srvproduct = ” 
 , @Provider = ‘SQLNCLI’ 
 , @datasrc = ‘Remote SQL Server instance name’ 

Я предлагаю вам обратиться по следующей ссылке, чтобы узнать, как запустить SQL-запрос на удаленном сервере http://ashishkhandelwal.arkutil.com/sql-server/sql-query-to-the-remote-sql-server/

0 голосов
/ 21 января 2010

Это самый низкоуровневый способ запроса базы данных с помощью ADO.NET. Открыть соединение, отправить команду, прочитать результаты. Однако вы должны использовать параметризованные запросы вместо String.Format, поскольку это откроет вашу программу для внедрения SQL. Просто подумайте, что произойдет, если в UserName есть символ '. Следующее было бы намного лучше:

string sql = @"Select mx.Id, mx.UserName, mx.firstname, mx.surname,
               mx.sectorCode, mx.deleteFlag, dn.sectorGroupCode,
               dn.region, dn.district
               From users mx
               Inner Join sector dn on dn.sectorCode = mx.sectorCode
               Where (mx.UserName = ?)";

var command = new OleDbCommand(sql);
command.Parameters.AddWithValue(0, UserName);

Если вы хотите интерфейс более высокого уровня, посмотрите DataSets / DataAdapters . Они не такие причудливые, как LINQ, но они дадут вам возможность легко заполнять / обновлять и работать с любым адаптером базы данных. Если вы используете Visual Studio, вы даже получаете визуальный дизайнер, который может создавать типизированные наборы данных в режиме перетаскивания, что даст вам строгое типизированное средство доступа ко всем вашим данным.

Возможно, вы захотите взглянуть на собственные классы коннекторов MySql вместо использования ODBC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...