ためのおかげで、あなたのデータ変数は、行のコレクションです。それぞれの行で面白いことをするには、コレクションを繰り返し処理する必要があります。
foreach (var row in data)
{
string staffCode = row["StaffCode"].ToString();
string perms = row["Perms"].ToString();
}
更新:
あなただけGetSomeData(...)は、単一の行を返すことを期待するあなたのコメントに基づいて、私は1 2のものをお勧めしたいです。
IDataRecordを返すようにGetSomeDataのシグネチャを変更します。実装から「yield」を削除します。
public IDataRecord GetSomeData(string fields, string table, string where = null, int count = 0)
{
string sql = "SELECT @Fields FROM @Table WHERE @Where";
using (SqlConnection cn = new SqlConnection(db.getDBstring(Globals.booDebug)))
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cmd.Parameters.Add("@Fields", SqlDbType.NVarChar, 255).Value = where;
cn.Open();
using (IDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
return (IDataRecord)rdr;
}
}
}
}
}
それとも
var row = data.FirstOrDefault();
if (row != null)
{
string staffCode = row["StaffCode"].ToString();
string perms = row["Perms"].ToString();
}
備考:
GetSomeDataの実装が不完全です。あなたはいくつかのパラメータ、最も重要なのはfieldsパラメータを使用していません。概念的には、SQLではどのフィールドが返されるか、どのテーブルが使用されるかなどをパラメータ化することはできませんが、動的クエリを作成して実行する必要があります。ここで
アップデート2
は(C#6で、以前のバージョンでは、それが必要な場合は私に知らせて)適切なクエリを構築GetSomeDataの実装です。
public IEnumerable<IDataRecord> GetSomeData(IEnumerable<string> fields, string table, string where = null, int count = 0)
{
var predicate = string.IsNullOrWhiteSpace(where) ? "" : " WHERE " + where;
string sql = $"SELECT { string.Join(",", fields) } FROM {table} {predicate}";
using (SqlConnection cn = new SqlConnection(db.getDBstring(Globals.booDebug)))
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cn.Open();
using (IDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
yield return (IDataRecord)rdr;
}
}
}
}
これはどのように使用するかです。
IEnumerable<IDataRecord> data = bw.GetSomeData(new[] { "StaffCode", "Perms" }, "BW_Staff", "StaffCode = 'KAA'");
あなたはそれを列挙するか、または.FirstOrDefaultを呼び出すことができます。それはあなたの選択です。 GetSomeDataを呼び出すたびに、クエリが実行されます。 C#
public IEnumerable<IDataRecord> GetSomeData(IEnumerable<string> fields, string table, string where = null, int count = 0)
{
var predicate = string.IsNullOrEmpty(where) ? "" : " WHERE " + where;
string sql = string.Format("SELECT {0} FROM {1} {2}", string.Join(",", fields), table, predicate);
using (SqlConnection cn = new SqlConnection(db.getDBstring(Globals.booDebug)))
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cn.Open();
using (IDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
yield return (IDataRecord)rdr;
}
}
}
}
「フィールド」の以前のバージョンで実装
更新3
GetSomeDataいずれかの文字列の配列または区切り文字に分割されて区切られた文字列である必要があります。そのフィールドの配列をループして、cmd.Parameters.Add行を構築します。 –