内联SQL查询的最佳实践

use*_*183 8 c# sql-server asp.net visual-studio

我正在使用一个使用大量内联SQL查询的asp.net网站......我想知道最好是在运行时创建内联查询:

int i = 500;

    using (SqlConnection conn = new SqlConnection(connStr))
    {
        SqlCommand com = new SqlCommand(conn);
        ...
        com.CommandText = "select from table where column < @parameter";
        ...
    }
Run Code Online (Sandbox Code Playgroud)

或者有一个类来保存应用程序所需的所有查询.像这样的东西:

class SqlQueries
{
    private string query1 = 
          "select * from tblEmployees where EmployeeName = @EmployeeName";

    private string query2 = 
          "select * from tblVacation where EmployeeName = @EmployeeName";

    public string Query(string s) 
    { 
        string str = string.Empty;

            switch (s) 
            {
                case "query1":
                    str = query1; 
                    break; 
                case "query2":
                    str = query2; 
                    break;
            }     

    return str;    

    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Abe*_*ler 7

我在我的日子里使用了很多ADO.NET查询,而且我总是使用第一种方法.第二种方法是一个有趣的想法,但如果您在使用它的代码中的另一个位置,编辑这些查询可能会很麻烦.它还使查看代码中特定位置的查询更加困难.例:

string sql = "Update User set age = @age where UserId = @UserId";
Run Code Online (Sandbox Code Playgroud)

告诉开发人员发生了什么,同时:

string sql = SqlQueries.Query("updateAge");
Run Code Online (Sandbox Code Playgroud)

留下有关正在更新的表/列的问题.另外,对于第一个,您确切地知道需要添加哪些参数.

如果您在几个可能会改变的地方编写此查询


Ste*_*art 6

将文字直接放在方法中并不可怕,只要每次要运行该查询时总是调用相同的方法即可.但是,如果要将该字符串文字复制到代码中的多个位置,则绝对优先使用常量.但是,不是在第二个示例中将字符串作为Query方法的参数,而是应该使用枚举值.

但是,如果您使用的是您描述的第二种方法,我会问您为什么不开始使用存储过程?