我正在尝试使用函数从表中返回值,但我无法确定执行此操作的最佳方法。使用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;
}
}
}
它有效但奇怪的问题它会永远循环... 我想要一个类似的方法,它可以做同样的事情,但它可以处理空值和有效的方法,如果可能的话,使用字典或字符串数组等替代方法吗?
感谢
答案 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();
}