读取ID值始终为0

时间:2019-05-12 10:21:43

标签: c# sql-server asp.net-mvc

我有一个要从中读取特定值的数据库。

我在阅读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;
    }
}

2 个答案:

答案 0 :(得分:1)

在没有更多有关您特定问题的信息的情况下,很难回答您的问题,但是我认为您的真正问题所在

rdr.Read();

行。 SqlDataReader.Read method将您的数据读取器移至 next 记录,这意味着您正在与

一起读取 next 行的rdr["Approved"]
if (Convert.ToInt32(rdr["Approved"]) == 1)

代码似乎很奇怪,我认为这不是您想要的。您可能要考虑删除它。

我还有一些建议;

答案 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

                }