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

本文关键字:字段 返回 数据库 函数 使用 | 更新日期: 2023-09-27 18:15:19

我试图使用函数从表返回值,我无法决定这样做的最佳方式。使用SqlDataReader,字典,字符串数组?当调用函数时,我需要引用字段名称字符串的数据。

    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;
            }
        }
    }

使用函数:

SqlDataReader userInfo = User.staffInfo("StaffCode, GroupIDs, Perms", User.getUsername());
string staffCode = userInfo["StaffCode"].ToString());

它可以工作,但奇怪的问题是它有时会永远循环。我想要一个类似的方法,它做同样的事情,但它可以处理null和有效的方式来做这个使用替代,如字典或字符串数组,如果可能的话?

谢谢

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

这个怎么样?我改编自我的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;
        }
    }
}

不使用SqlDataReader、Array或Dictionary -我会选择Dapper。Dapper是一个微型ORM。Stackexchange构建并使用它。简单地说,它将允许您:

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

假设一个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(); 
    }