使用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和有效的方式来做这个使用替代,如字典或字符串数组,如果可能的话?
谢谢
这个怎么样?我改编自我的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();
}