C#SqlCommand命名约定

Pro*_*ear 1 c# sql asp.net coding-style naming-conventions

我很擅长使用C#和ASP.NET,我很好奇是否有一个约定在SQL数据库上运行多个查询时命名SqlCommands.例如,我创建了我的SqlConnection,我希望调用一个函数,两个存储过程,并创建一个常规的简单查询.目前,我正在使用:

SqlCommand function = new SqlCommand();
SqlCommand command = new SqlCommand();
SqlCommand proc1 = new SqlCommand();
SqlCommand proc2 = new SqlCommand();
Run Code Online (Sandbox Code Playgroud)

对于这些不同的命令是否有更多的接受命名约定,或者我应该使用单个命令,因为我在后面的代码块中使用CommandText和CommandType调用?

Fel*_*ani 5

如果在同一范围内有很多命令,则可以使用personCommand或等名称productCommand.从MSDN常规命名约定中,您可以:

请选择易读的标识符名称.例如,名为Horizo​​ntalAlignment的属性比AlignmentHorizo​​ntal更具英文可读性.

在简洁方面倾向于可读性.属性名称CanScrollHorizo​​ntally优于ScrollableX(对X轴的模糊引用).

请勿使用下划线,连字符或任何其他非字母数字字符.X请勿使用匈牙利表示法.

使用与广泛使用的编程语言的关键字冲突的标识符进行避免.

了解有关C#编码约定的更多信息.在其他情况下,我更喜欢使用只是command保持简单,因为范围会告诉我.

另一个很好的提示,当你用它实现的工作类型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;
}
Run Code Online (Sandbox Code Playgroud)

编码惯例还有很多.请参阅参考文献中的链接.

  • to @ sab669 ...下划线前缀通常用于定义类级别变量,因此您可以快速告知类共享的本地范围... .Net中更常见的模式是现在使用自动属性.哦,你应该总是调用`.Dispose()`,因为对象可能正在保存需要释放的系统资源.如果等待终结器,则可以轻松地创建资源泄漏. (3认同)
  • 啊,只是为别人添加这个.(来自[MSDN](https://msdn.microsoft.com/en-us/library/yh598w02.aspx))"using语句确保即使在对象上调用方法时发生异常,也会调用Dispose.您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果;实际上,这就是编译器如何翻译using语句. (2认同)
  • 正如@MatthewWhited所说,当你在`get` /`set`中没有两个规则时,自动属性很容易创建属性.关于命名约定有很多事情,如果我们试图在这里解释一切,那么它将是一本书哈哈. (2认同)