我有一个要从中读取特定值的数据库。
我在阅读ID
时始终显示为0。
public void ClustersStatus(Clusters cl)
{
using (SqlConnection con = new SqlConnection("Data Source=DESKTOP-JMGPJ6J;Initial Catalog=Infinity;Integrated Security=True"))
{
using (SqlCommand cmd = new SqlCommand("Select Approved from Master_Cluster where ClusterID = @id", con))
{
con.Open();
cmd.Parameters.AddWithValue("@id", cl.ClusterID);
cmd.Connection = con;
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
rdr.Read();
if (Convert.ToInt32(rdr["Approved"]) == 1)
{
}
else
{
}
}
}
// return cl;
}
}
答案 0 :(得分:1)
在没有更多有关您特定问题的信息的情况下,很难回答您的问题,但是我认为您的真正问题所在
rdr.Read();
行。 SqlDataReader.Read
method将您的数据读取器移至 next 记录,这意味着您正在与
rdr["Approved"]
列
if (Convert.ToInt32(rdr["Approved"]) == 1)
代码似乎很奇怪,我认为这不是您想要的。您可能要考虑删除它。
我还有一些建议;
AddWithValue
方法。 It may generate unexpected results sometimes。改用Add
方法(最好是Add(String, SqlDbType, Int32)
overload)答案 1 :(得分:0)
假设您的查询为您提供了您想要的东西,为了能够使用通过SqlDataReader
读取的数据,您需要使用IDataRecord
界面。您不能直接使用rdr
变量。
为了易于使用,我将读取引擎编写为一个函数。我在这里写这个想法是为了让您适应您的需求:
private static int ReadSingleRow(IDataRecord record)
{
//below is an example of processing using `record`. You adapt it to your needs
int.TryParse(record[0].ToString(), out int temp);
MessageBox.Show (temp.ToString());
//...do the processing you need
return temp;
}
编写函数后,主要内容变为:
if (rdr.HasRows)
{
while (rdr.Read());
int x=ReadSingleRow((IDataRecord) rdr);
//or use, somehow, the above function
// other processing
}