使用c#中的函数按字段名称返回数据库值

时间:2016-10-28 10:00:18

标签: c# function methods sqldatareader reader

我正在尝试使用函数从表中返回值,但我无法确定执行此操作的最佳方法。使用SqlDataReader,字典,字符串数组? 调用函数时,我需要用字段名字符串引用数据。

"failed to find headers for libxml2: update includes_dir"

使用该功能:

    public SqlDataReader staffInfo(string field, string Username)
    {
        string chk_PR = this.Is_PR_Staff(Username) == true ? BW_Config.default_postroom_staff : "";

        string strDBConn = db.getDBstring(Globals.booDebug);
        SqlConnection conn = new SqlConnection(strDBConn);

        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandText = "SELECT " + field + " FROM BW_GetStaffInfo('" + Username + "', '" + chk_PR + "')";
            cmd.Connection = conn;
            conn.Open();

            SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

            if (reader.Read())
            {
                return reader;
            }
            else
            {
                return null;
            }
        }
    }

它有效但奇怪的问题它会永远循环... 我想要一个类似的方法,它可以做同样的事情,但它可以处理空值和有效的方法,如果可能的话,使用字典或字符串数​​组等替代方法吗?

感谢

2 个答案:

答案 0 :(得分:0)

怎么回事?我从我的vb代码改编它,我不知道是否有语法错误,但你应该知道它的要点。 ;)

public Dictionary<String, Object> staffInfo(string field, string Username)
{
    string chk_PR = this.Is_PR_Staff(Username) == true ? BW_Config.default_postroom_staff : "";

    string strDBConn = db.getDBstring(Globals.booDebug);
    SqlConnection conn = new SqlConnection(strDBConn);

    using (SqlCommand cmd = new SqlCommand())
    {
        cmd.CommandText = "SELECT " + field + " FROM BW_GetStaffInfo('" + Username + "', '" + chk_PR + "')";
        cmd.Connection = conn;
        conn.Open();

        SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

        if (reader.Read())
        {
            Dictionary<String, Object> row = new Dictionary<String, Object>;
            Object obj = nothing;
            for (i = 0; i < reader.FieldCount; i++){
                obj = reader.GetValue(i);
                if (IsDBNull(obj)){
                    obj = "";
                }
                row.add(reader.GetName(i), obj);
            }
            return row;
        }
        else
        {
            return null;
        }
    }
}

答案 1 :(得分:0)

而不是SqlDataReader,Array或Dictionary - 我选择Dapper。 Dapper是一个miro ORM。 Stackexchange构建并使用它。简而言之,它将允许您:

  

执行查询并将结果映射到强类型列表

假设Employee类/表的简单示例。

    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Designation { get; set; }
    }

    using (IDbConnection db = new SqlConnection("SOME CONNECTION STRING")
    { 
        var employees = db.Query<Employee>("SELECT * FROM EMPLOYEE").ToList(); 
    }