C# 未获取datatable对象的计数

C# 未获取datatable对象的计数,c#,asp.net,datatable,C#,Asp.net,Datatable,我想检查查询中是否存在任何记录 所以我尝试的是 DataTable dtmkeylength = new DataTable("select count(lease_no) from XXACL_PROSPECTIVE_DATA_SAVE where mkey = " + Request.QueryString["userid"].ToString() + ""); if (dtmkeylength.Rows.Count > 0) {

我想检查查询中是否存在任何记录

所以我尝试的是

 DataTable dtmkeylength = new DataTable("select count(lease_no) from XXACL_PROSPECTIVE_DATA_SAVE where mkey = " + Request.QueryString["userid"].ToString() + "");

        if (dtmkeylength.Rows.Count > 0)
        {
            HidMode.Value = "M";
            HidMKey.Value = dtmkeylength.Rows[0]["Mkey"].ToString();
        }
下面的datatable对象在数据库中有
2
条记录的计数,但它仍然没有进入IF条件

为什么?

在查询中添加“as NNN”内容:

因此,您可以通过名称引用它

然后,在查询时,可以键入:

dtmkeylength.Rows[0]["result"]
我希望这能帮你解决:)

编辑

在查询中添加“as NNN”内容:

因此,您可以通过名称引用它

然后,在查询时,可以键入:

dtmkeylength.Rows[0]["result"]
我希望这能帮你解决:)

编辑


我认为更好的方法是使用,因为您只使用计数

using (SqlConnection conn = new SqlConnection(connString))
{
    String sql = "select count(lease_no) from XXACL_PROSPECTIVE_DATA_SAVE where mkey = @mkey";
    SqlCommand cmd = new SqlCommand(sql, conn);
    cmd.Parameters.Add("@mkey", (int) Request.QueryString["userid"]);

    try
    {
        conn.Open();
        int rowCount = (int) cmd.ExecuteScalar();

        if (rowCount  > 0)
        {
            HidMode.Value = "M";
            HidMKey.Value = dtmkeylength.Rows[0]["Mkey"].ToString();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

还要注意,参数化查询-
@mkey
是作为参数提供的,不使用字符串连接(这可能导致Sql注入)

我认为更好的方法是使用,因为您只使用计数

using (SqlConnection conn = new SqlConnection(connString))
{
    String sql = "select count(lease_no) from XXACL_PROSPECTIVE_DATA_SAVE where mkey = @mkey";
    SqlCommand cmd = new SqlCommand(sql, conn);
    cmd.Parameters.Add("@mkey", (int) Request.QueryString["userid"]);

    try
    {
        conn.Open();
        int rowCount = (int) cmd.ExecuteScalar();

        if (rowCount  > 0)
        {
            HidMode.Value = "M";
            HidMKey.Value = dtmkeylength.Rows[0]["Mkey"].ToString();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

另请注意,参数化查询-
@mkey
作为参数提供,不使用字符串连接(这可能导致Sql注入)

即使行计数为零,它也将始终返回行

试一试

int number=dtmkeylength.Rows[0]。字段(0);
如果(数字>0)
{
...
}

即使行数为零,它也将始终返回行

试一试

int number=dtmkeylength.Rows[0]。字段(0);
如果(数字>0)
{
...
}
试试这个:

static void Main(string[] args)
        {
            string param = "VINET";//your param here
            string conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
            using(SqlConnection  conn = new SqlConnection(conStr))
            {
                conn.Open();
                //modify your command on below line
                SqlCommand cmd = new SqlCommand("select count(OrderId) from Orders where CustomerID='" + param + "'");
                cmd.Connection = conn;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                conn.Close();
                if(ds.Tables[0].Rows.Count > 0)
                {
                    //do other staff
                }
            }
        }   
*请按照评论的行

编辑
下面是填充数据表方式的调试屏幕截图。如您所见,dt将命令检测为表名,而不是命令。
试试这个:

static void Main(string[] args)
        {
            string param = "VINET";//your param here
            string conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
            using(SqlConnection  conn = new SqlConnection(conStr))
            {
                conn.Open();
                //modify your command on below line
                SqlCommand cmd = new SqlCommand("select count(OrderId) from Orders where CustomerID='" + param + "'");
                cmd.Connection = conn;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                conn.Close();
                if(ds.Tables[0].Rows.Count > 0)
                {
                    //do other staff
                }
            }
        }   
*请按照评论的行

编辑
下面是填充数据表方式的调试屏幕截图。如您所见,dt将命令检测为表名,而不是命令。

数据表的构造函数没有接受select语句,这就是为什么它是空的,没有选择

可用的构造函数重载有以下三种:

System.Data.DataTable dtmkeylength = new System.Data.DataTable();


检查并举例说明如何使用
DataTable

没有接受select语句的
DataTable的构造函数,这就是为什么它是空的,还没有选择任何语句

可用的构造函数重载有以下三种:

System.Data.DataTable dtmkeylength = new System.Data.DataTable();



检查并举例说明如何使用
数据表

似乎这需要调试,尝试调试
dtmkeylength
实例并查看是否实际检索到任何数据,我怀疑select语句没有通过调用
新数据表(“select count(lease_no))返回任何行从XXACL_PROSPECTIVE_DATA_SAVE where mkey=“+Request.QueryString[“userid”].ToString()+”)
您只需创建名为
DataTable
从XXACL\u PROSPECTIVE\u DATA\u SAVE中选择count(lease\u no),其中mkey=+Request.QueryString[“userid”].ToString()
@SeM:那么我该怎么做才能在datatable对象中获取记录呢?read Article似乎需要调试,试着调试
dtmkeylength
实例,看看是否有实际检索到的数据,我怀疑select语句没有通过调用
新datatable(“select count(lease_no))返回任何行从XXACL_PROSPECTIVE_DATA_SAVE where mkey=“+Request.QueryString[“userid”].ToString()+”)
您只需创建名为
DataTable
从XXACL\u PROSPECTIVE\u DATA\u SAVE中选择count(lease\u no),其中mkey=+Request.QueryString[“userid”].ToString()
@SeM:那么我该怎么做才能在datatable对象中获取记录呢?阅读Article我认为无论你建议的列别名是什么,Rows.Count都应该包含一些内容,对吧?Row Count应该是1,因为他选择的是一个没有分组的计数,所以是的,没错。我猜他也可以只寻址列0,而不使用列别名。虽然没有那么详细,但仍然有一些技巧,您是正确的,它应该包含1行,值为0least@PedroG.Dias:你能完全更新你的答案吗。因为我不知道如何编写它?请尝试以下操作:HidMKey.Value=dtmkeylength.Rows[0][0].ToString();我认为
dtmkeylength.Rows.Count
应该包含一些内容,而不管您建议的列别名是什么,对吗?Row Count应该是1,因为他选择的是一个计数而没有分组,所以是的,没错。我猜他也可以只寻址列0,而不使用列别名。虽然没有那么详细,但仍然有一些技巧,您是正确的,它应该包含1行,值为0least@PedroG.Dias:你能完全更新你的答案吗。因为我不知道如何编写它?请尝试以下操作:HidMKey.Value=dtmkeylength.Rows[0][0].ToString();如何将mkey作为参数传递?当用户登录时,您可以使用额外的
if
条件来处理未登录的用户案例。当用户未登录时,您的代码应该做什么?如果用户未登录,它将重定向到错误页面。所以,如果用户未被跟踪,您可以更新代码吗?如何将mkey作为参数传递?当用户登录时,您可以使用额外的
if
条件来处理未登录的用户案例。当用户未登录时,您的代码应该做什么?如果用户未登录,它将重定向到错误页面。因此,如果用户未被跟踪,您可以更新代码……尝试如下操作。
DataTable dtmkeylength=newdatatable(“选择计数(租约号)作为XXACL的结果,并保存在mkey=“+Request.QueryString[“userid”].ToString()+”;int number=Convert.ToInt32(dtmkeylength.Rows[0][“结果”])获取错误,因为位置0处没有行。尝试如下操作。
DataTable dtmkeylength=new DataTable(“选择计数(租约号)作为XXACL_PROSPECTIVE_DATA_SAVE的结果,其中mkey=“+Request.QueryString[“userid”].ToString()+”;
System.Data.DataTable dtmkeylength = new System.Data.DataTable("TableName", "tableNameSpace");