c# - 我应该如何合并这两种方法?

标签 c# oop


大家好!
我问过一次熟悉的问题,现在我又被困住了
重构这个的更好方法是什么?
附言。不想将查询作为参数传递,搜索最优雅的解决方案


方法一

public static List<string> GetWinners(Prize prize)
    {
        List<string> winners = new List<string>();

        using (OleDbConnection connection = new OleDbConnection(ConfigurationManager.ConnectionStrings["ForteLotteryDataConnectionString"].ConnectionString))
        {
            var query = string.Concat(
                @"
                    SELECT Member.IBAN ",
                    "FROM Member, Summary ",
                    "WHERE Member.ID = Summary.WinnerID ",
                    "AND PrizeID = " + prize.ID
            );

            connection.Open();
            OleDbCommand command = new OleDbCommand(query, connection);
            OleDbDataReader reader = command.ExecuteReader();

            ...

            connection.Close();
        }

        return winners;
    }


方法二

    public static List<string> GetDoubles(Prize prize)
    {
        List<string> doubles = new List<string>();

        using (OleDbConnection connection = new OleDbConnection(ConfigurationManager.ConnectionStrings["ForteLotteryDataConnectionString"].ConnectionString))
        {
            var query = string.Concat(
                @"
                    SELECT Member.IBAN ",
                    "FROM Member, Summary ",
                    "WHERE Member.ID = Summary.DoubleID ",
                    "AND PrizeID = " + prize.ID
            );

            connection.Open();
            OleDbCommand command = new OleDbCommand(query, connection);
            OleDbDataReader reader = command.ExecuteReader();

            ...

            connection.Close();
        }

        return doubles;
    }

最佳答案

使用 String.Format 并将 propname 作为参数传递:

    public static List<string> GetSomething(string propName, Prize prize)
    {
        List<string> doubles = new List<string>();

        using (OleDbConnection connection = new OleDbConnection(ConfigurationManager.ConnectionStrings["ForteLotteryDataConnectionString"].ConnectionString))
        {
            var query = string.Format(
                @"SELECT Member.IBAN,
                    FROM Member, Summary,
                    WHERE Member.ID = Summary.{0},
                    AND PrizeID = {1}", propName, prize.ID
            );

            connection.Open();
            OleDbCommand command = new OleDbCommand(query, connection);
            OleDbDataReader reader = command.ExecuteReader();

            ...

            connection.Close();
        }

        return doubles;
    }

顺便说一句 - 小心 SQLI's - 阅读有关参数化查询的内容。

关于c# - 我应该如何合并这两种方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31847928/

相关文章:

javascript - 关于Javascript中对象声明的问题

oop - 合成不是“合成”

c# - 如何替换已弃用的 csc ant 任务

c# - 使用 Cake 构建和 MSBuild 在 TFS 中报告错误

c# - 引用非标量闭包 c#

oop - 无需初始化的 OCaml 数据成员

java - 调用compareTo方法java问题

java - 同名调用的非覆盖子类方法

c# - 需要使用 LINQ 从多维数组中求和

c# - asp.net/c# 网络应用入门