2012-04-17 4 views
0

OK здесь мой кусок кодаобычно интегрировать строки кода во многих местах в C#

MySqlConnection conn = new MySqlConnection("Userid=root;pwd=root;port=3306;host=localhost;database=test"); 
conn.Open(); 

Из-за какой-то вопрос с новой версией разъема DevArt я использую я, чтобы добавить строку код OldCompatibility.BinaryAsString = true; везде в моем коде, как показано ниже

OldCompatibility.BinaryAsString = true; 
MySqlConnection conn = new MySqlConnectio("User id=root;pwd=root;port=3306;host=localhost;database=test"); 
conn.Open(); 

Но проблема в том, что я должен сделать это изменение всего моего приложения, которые имеют много страниц этой части code.So есть ли способ сделать это глобально так что я не должен делать это изменение во всем мое заявление. я использую разъем DevArt 6

+0

В будущем вы хотели бы написать одну функцию для создания соединения и централизации кода :). На данный момент: есть ли у вас базовый класс или что-то общее для всех страниц? Вы можете поместить эту строку в функцию, которая вызывается каждой страницей. –

ответ

4

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

public static MySqlConnection Connect() { 
    OldCompatibility.BinaryAsString = true; 
    MySqlConnection conn = new MySqlConnection("User id=root;pwd=root;port=3306;host=localhost;database=test"); 
    conn.Open(); 

    return conn; 
} 
+0

ну в моем приложении я не использую какой-либо пользовательский метод, например Connect, поэтому его невозможно сделать так, как если бы я это сделал, мне пришлось бы его повсюду менять – Jay

+1

@ Jay: В этом суть. Вы в значительной степени должны изменить его везде, независимо от того, вы можете использовать Find and Replace, чтобы помочь вам в этом, и это все. Но если/когда вы должны изменить его снова, вы не будете * менять его повсюду. Просто используйте метод, оставайтесь [DRY] (http://en.wikipedia.org/wiki/Don't_repeat_yourself «Не повторяйте себя»). – Ryan

1

MySqlConnection ваш пользовательский класс, если вы поставите OldCompatibility.BinaryAsString = истинный в конструкторе MySqlConnection, то он будет работать

+2

Я думаю, что MySQLConnection - это класс для драйвера MYSQl для .Net. –

+0

Затем создайте новый класс MyCustomSQLConnection, который обертывается вокруг MySQLConnection, тогда он будет служить вашей причине – Adil

+0

1), которая снова должна была бы меняться везде 2) Не уверен, что она запечатана или может быть унаследована. –

0

Вы можете использовать factory method

public class FactoryMethods 
{ 
    public static MySqlConnection GetConfiguredConnection() 
    { 
    OldCompatibility.BinaryAsString = true; 
    MySqlConnection conn = new MySqlConnectio("User id=root;pwd=root;port=3306;host=localhost;database=test"); 
    conn.Open(); 
    return conn; 
    } 
} 

И предполагая, что соединение является IDispose-способного

using (var myConn = FactoryMethods.GetConfiguredConnection()) 
{ 
    // Use your connection here 
} 
+1

Хотя это правильный способ сделать это, но опять же, он должен будет изменить ситуацию повсюду. Если плакат может жить с этим, я также отвечу на этот ответ. –

+0

@nonnb can not сделать это так, так как это потребует от меня внесения изменений по всему моему проекту. – Jay

+0

Не имеет ли у DevArt параметр web.config, где вы можете глобально настроить параметр совместимости? В будущем вы бы рекомендовали инкапсулировать и/или внедрить создание сложных объектов, таких как строки SQL Connection, чтобы предотвратить такую ​​проблему обслуживания. – StuartLC

0

Изменить весь код сразу с поиском и замена с использованием регулярных выражений:

1.- Нажмите Ctrl + H, чтобы открыть окно «Найти и заменить». Введите ваш поиск , замените разрывы строк на «\ n» (без котировок)

2.- Разверните «Найти параметры» и установите флажок «Использовать», выберите «Регулярные выражения» (это также активирует стрелку вправо рядом с надписью «Найти, что», коробка. В нем перечислены несколько команд/ярлыков).

Например: Тип этого на находку:

{MySqlConnection conn = new MySqlConnection} 

Тогда попробуйте это на замену:

OldCompatibility.BinaryAsString = true;\n\t\t\1 MySqlConnection conn = new MySqlConnection 

Найдет весь код, соответствующий запрос и добавить дополнительную строку Infront из Это. Обратите внимание на место держатель {...} заменяется \ 1

0

Вы должны действительно считают @ предложение Minitech на использовании метода, но если вы действительно не можете изменить код в любом месте, есть только действительно два варианта, которые я вижу;

  • Продлить MySQLConnection к новому классу с тем же именем в другом пространстве имен, только изменяя конструктор, чтобы включить вашу линию. Затем замените только строку using в верхней части файла.

  • Если это невозможно сделать, примените класс-оболочку таким же образом.

Обе эти опции могут не работать (# 1, если класс является окончательным, например, и # 2, если класс передается в качестве параметра любой функции), но если вы не можете по крайней мере сделать глобальный искать/заменять или реализовывать предложение @ minitech с помощью метода, я не вижу другого способа.