0

此查询在数据库中执行。

 select COUNT(*) from Patient_Data where  DummyValue = 'Y';

 104

我必须number (104)databaseto检索这个,asp.net with c#以便当计数变为零时disable a button,我必须如何将retrieve这个数字从数据库中输入到代码中。它应该存储为integer.

我已经在 c# 中尝试过这些代码行

    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString))
    {
        using (SqlCommand cmd = new SqlCommand("select COUNT(*) as PatientCount from Patient_Data where  DummyValue = 'Y' ", cn))
        {
            try
            {

                cn.Open();

                using (SqlDataReader rdr = cmd.ExecuteReader())
                {
                    int Patcount;
                    if (rdr.Read())
                    {
                        //Code Required

                    }
                }
            }
            catch (Exception ex)
            {

                // handle errors here
            }

        }


    }
4

4 回答 4

2

使用别名获取计数如下:

select COUNT(*) as PatientCount from Patient_Data where  DummyValue = 'Y';

读取PatientCount 代码中的值。

您可以使用GetInt32()函数来获取countas int
注意:您在查询中传递参数值会导致 Sql 注入攻击,因此您可以使用参数化 Sql 查询来避免它们。

示例代码如下:

private int readPatientData()
        {
            int PatientCount = 0;              
            String strCommand = "select COUNT(*) as PatientCount from Patient_Data where  DummyValue = @MyDummyValue";
            using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString))
            {
                sqlConnection.Open();
                using (SqlCommand sqlcommand=new SqlCommand(strCommand,sqlConnection))
                {
                    sqlcommand.Parameters.Add(new SqlParameter("MyDummyValue", 'Y'));
                    SqlDataReader sqlReader = sqlcommand.ExecuteReader();
                    if (sqlReader.Read())
                        PatientCount = sqlReader.GetInt32(0);
                }
            }
            return PatientCount;
        }
于 2013-11-11T07:07:47.407 回答
1

我用这些代码行解决了我的问题。

        using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString))
    {
        using (SqlCommand cmd = new SqlCommand("select COUNT(*) as PatientCount from Patient_Data where  DummyValue = 'Y' ", cn))
        {
            try
            {

                cn.Open();

                using (SqlDataReader rdr = cmd.ExecuteReader())
                {
                    //int Patcount;
                    if (rdr.Read())
                    {
                        int Patcount = int.Parse(rdr["PatientCount"].ToString());
                        if (Patcount != 0)
                        {
                            Label3.Visible = true;
                            Label3.Text = "You have already have "+Patcount+" dummy records,Please update those records by clicking Update Dummy Records Link.";
                            btnSkipSubmit.Visible = false;
                        }
                        //Code Required


                    }
                }
            }
            catch (Exception ex)
            {

                // handle errors here
            }

        }


    }
于 2013-11-11T08:35:01.390 回答
0

据我所知,有三种方法可以做到这一点:

  1. 使用COUNT,您可以执行以下操作:

    从 Patient_Data 中选择 COUNT(*) 作为 RowCount,其中 DummyValue = 'Y';

  2. 使用ROW_NUMBER你可以这样做:

    选择 ROW_NUMBER() OVER (ORDER BY Patient_Data.ID DESC) AS RowNumber from Patient_Data where DummyValue = 'Y';

  3. 还有另一种方法,但这种方法只是获取行数,据我说是在 sql server 中获取行数的最快方法。

    SELECT Total_Rows= SUM(st.row_count) FROM sys.dm_db_partition_stats st WHERE object_name(object_id) = 'Patient_Data' AND (index_id < 2)

就这样

于 2013-11-11T07:18:52.530 回答
0

根据相关代码更改进行更新

您可以编写rdr.GetInt32(3);而不是code required在您的代码中。

上一个答案

您需要在执行命令时使用ExecuteScalar方法。以下是来自 msdn 的示例:

静态公共 int AddProductCategory(string newName, string connString)
{
    Int32 newProdID = 0;
    字符串 sql =
        "插入生产。ProductCategory (Name) VALUES (@Name); "
        + "SELECT CAST(scope_identity() AS int)";
    使用 (SqlConnection conn = new SqlConnection(connString))
    {
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.Add("@Name", SqlDbType.VarChar);
        cmd.Parameters["@name"].Value = newName;
        尝试
        {
            conn.Open();
            newProdID = (Int32)cmd.ExecuteScalar();
        }
        捕捉(例外前)
        {
            Console.WriteLine(ex.Message);
        }
    }
    返回(int)newProdID;
}

在此示例中,他们返回新添加的产品 ID。

ExecuteScalarint.parse返回对象,您可以使用方法或您知道的最好的方法检查 null 并转换为数字。

于 2013-11-11T07:19:42.360 回答