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");