2015-09-16 3 views
1

Я довольно новичок в работе с C# и ASP.NET, и мне любопытно, существует ли соглашение об именах SqlCommands, когда в базе данных SQL выполняется несколько запросов. Например, я создал свой SqlConnection, и я хочу вызвать функцию, две хранимые процедуры и просто создать обычный простой запрос. В настоящее время я использую:Соглашение об именовании C# SqlCommand

SqlCommand function = new SqlCommand(); 
SqlCommand command = new SqlCommand(); 
SqlCommand proc1 = new SqlCommand(); 
SqlCommand proc2 = new SqlCommand(); 

Есть ли более общепринятое именование для этих разных команд или я должен просто использовать одну команду, как я использую CommandText и CommandType вызывает в последующих блоках кода?

+0

Почему бы вам не обернуть все ваши функции/СП в одну единую программу StoredProcedure. –

+0

вам не нужно иметь экземпляр для каждого запроса. Просто измените commandType. – Arash

+0

Я вообще просто создаю сингулярный 'SqlCommand cmd', присваиваю его свойства и выполняю его. Затем повторно назначьте все, используя тот же самый объект 'cmd', что и для других задач, связанных с БД. В качестве альтернативы, как сказал Майанк, вы можете просто создать общий метод, который принимает имя процедуры, набор параметров и цикл над ними. – sab669

ответ

5

Если у вас много команд в той же области действия, вы можете иметь имена, такие как personCommand или productCommand. С MSDN General Naming Conventions вы можете:

DO выбирайте легко читаемые имена идентификаторов. Например, свойство с именем HorizontalAlignment более читается на английском языке, чем Выравнивание по горизонтали.

DO поощряет читаемость по краткости. Свойство имя CanScrollHorizontally лучше, чем ScrollableX (неясное ссылка на ось X).

НЕ используйте символы подчеркивания, дефисы или любые другие неальфамерные символы. X НЕ используйте венгерскую нотацию.

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

Подробнее о C# Coding Conventions. В других случаях я предпочитаю использовать только command до Keep It Simple, потому что область подскажет мне.

Еще один хороший совет, когда вы работаете с типами, которые реализуют интерфейс IDisposable как SqlCommand, SqlConnection, вы можете использовать using() { } структуры расположить объект после этой области. Для образца:

public IEnumerable<Person> GetPersons() 
{ 
    var result = new List<Person>(); 

    using (var connection = new SqlConnection("connection string")) 
    { 
     // I know it is a person command, because it is in a method for it. 
     // Keep it simple! 
     using (var command = new SqlCommand("select id, name from persons", connection)) 
     { 
      using (var reader = command.ExecuteReader()) 
      { 
       while (reader.Read()) 
       { 
        result.Add(new Person() { 
        Id = (int) reader["id"]; 
        Name = reader["name"] as string;      
        }); 
       } 
      } // reader is disposed here 
     } // command is disposed here 
    } // connection is disposed here 

    return result; 
} 

Существует гораздо больше информации о кодировании. См. Ссылки по ссылкам.

+0

Как/почему это лучше, чем просто создание объекта (ов) в методе типа 'int foo() {var cmd = new SqlCommand();/* do stuff */return someInt; } '? Разве они не «уничтожают» себя после возвращения метода? Разве это не значит, что сборщик мусора? Я видел это раньше, поэтому я явно что-то пропустил. – sab669

+0

Добавление второго комментария в отношении вашего редактирования в соглашениях об именах. Нет подчеркиваний? На нескольких работах и ​​даже в колледже я часто видел код вроде: 'private string _someString; public string SomeString {get {return _someString; }} '. Но это, похоже, противоречит их руководящим принципам. Действительно ли это считается плохой формой? – sab669

+0

Как полубесконечная нота ... вам не нужно вставлять операторы 'using' с фигурными скобками. (Я считаю, что код должен быть чистым, чтобы просто складывать операторы using без вложенности, когда нет работы.) –

0

Хорошим и понятным вариантом было бы выразить то, что команда будет делать. Если вы читаете updateProductCommand или queryCategoryCommand все мгновенно знают цель команды. Когда вы нацеливаете хранимую процедуру, всегда полезно использовать имя sproc в качестве префикса команды, например sp_UpdateProductCommand.

+0

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

Смежные вопросы