C# - SqlDataReader 缺少列
C# - SqlDataReader missing columns
这是我的记录,就像下面 table 中的那样。
sql query
我的SQL查询是
select Category_NM as 'Kategoriler', avg(Payment) as 'Ortalamalar'
from Islem
where Category_Type = 'Gider'
group by Category_NM
还有我的代码:
public SqlDataReader DataReader(string Query_)
{
SqlCommand cmd = new SqlCommand(Query_, con);
SqlDataReader dr = cmd.ExecuteReader();
return dr;
}
和
SqlDataReader dr = sınıf.DataReader("select Category_NM as 'Kategoriler',AVG(Payment) as 'Ortalamalar' from Islem where Category_Type = 'Gider' group by Category_NM");
dr.Read();
chart1.Series[0].IsValueShownAsLabel = true;
while (dr.Read())
{
// MessageBox.Show(Convert.ToString(dr[0]+""+dr[1]));
chart1.Series[0].Points.AddXY(dr[0],dr[1]);
}
dr.Close();
问题是 reader 没有读取所有记录 - 像这样:
enter image description here
因为你在第一次调用 dr.Read()
然后迭代它们。
更正:
SqlDataReader dr = sınıf.DataReader("select Category_NM as 'Kategoriler',AVG(Payment) as 'Ortalamalar' from Islem where Category_Type = 'Gider' group by Category_NM");
chart1.Series[0].IsValueShownAsLabel = true;
while (dr.Read())
{
// MessageBox.Show(Convert.ToString(dr[0]+""+dr[1]));
chart1.Series[0].Points.AddXY(dr[0], dr[1]);
}
dr.Close();
每Read()
将行指针向前移动。
所以首先 Read()
跳过第一条记录。
如果你需要检查是否有任何记录然后chart1.Series[0].IsValueShownAsLabel = true;
使用if (dr.HasRows)
就足够了:
if(dr.HasRows)
{
chart1.Series[0].IsValueShownAsLabel = true;
//Iterate dr like while(dr.Read()){...}
}
但是你必须知道你的 while
块逻辑总是读取位置 0
的记录并获取 col0
和 col1
的值,如果你需要阅读您可以通过 foreach
或 for
迭代所有记录,例如:
foreach (DbDataRecord s in dr)
{
string kategoriler= s.GetString(0);
string ortalamalar = s.GetString(1);
}
或while
:
while(dr.Read())
{
var kat = dr["Kategoriler"].ToString();
var ort = dr["Ortalamalar"].ToString();
}
这是我的记录,就像下面 table 中的那样。 sql query
我的SQL查询是
select Category_NM as 'Kategoriler', avg(Payment) as 'Ortalamalar'
from Islem
where Category_Type = 'Gider'
group by Category_NM
还有我的代码:
public SqlDataReader DataReader(string Query_)
{
SqlCommand cmd = new SqlCommand(Query_, con);
SqlDataReader dr = cmd.ExecuteReader();
return dr;
}
和
SqlDataReader dr = sınıf.DataReader("select Category_NM as 'Kategoriler',AVG(Payment) as 'Ortalamalar' from Islem where Category_Type = 'Gider' group by Category_NM");
dr.Read();
chart1.Series[0].IsValueShownAsLabel = true;
while (dr.Read())
{
// MessageBox.Show(Convert.ToString(dr[0]+""+dr[1]));
chart1.Series[0].Points.AddXY(dr[0],dr[1]);
}
dr.Close();
问题是 reader 没有读取所有记录 - 像这样:
enter image description here
因为你在第一次调用 dr.Read()
然后迭代它们。
更正:
SqlDataReader dr = sınıf.DataReader("select Category_NM as 'Kategoriler',AVG(Payment) as 'Ortalamalar' from Islem where Category_Type = 'Gider' group by Category_NM");
chart1.Series[0].IsValueShownAsLabel = true;
while (dr.Read())
{
// MessageBox.Show(Convert.ToString(dr[0]+""+dr[1]));
chart1.Series[0].Points.AddXY(dr[0], dr[1]);
}
dr.Close();
每Read()
将行指针向前移动。
所以首先 Read()
跳过第一条记录。
如果你需要检查是否有任何记录然后chart1.Series[0].IsValueShownAsLabel = true;
使用if (dr.HasRows)
就足够了:
if(dr.HasRows)
{
chart1.Series[0].IsValueShownAsLabel = true;
//Iterate dr like while(dr.Read()){...}
}
但是你必须知道你的 while
块逻辑总是读取位置 0
的记录并获取 col0
和 col1
的值,如果你需要阅读您可以通过 foreach
或 for
迭代所有记录,例如:
foreach (DbDataRecord s in dr)
{
string kategoriler= s.GetString(0);
string ortalamalar = s.GetString(1);
}
或while
:
while(dr.Read())
{
var kat = dr["Kategoriler"].ToString();
var ort = dr["Ortalamalar"].ToString();
}