[英]Not getting count for datatable object
我想檢查查詢中是否存在任何記錄。
所以我嘗試的是
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”:
...select count(lease_no) as result...
因此您可以按名稱引用它。
然后,當您查詢時,可以鍵入:
dtmkeylength.Rows[0]["result"]
我希望可以為您修復它:)
編輯
var userId = Request.QueryString["UserId"];
if(string.IsNullOrEmpty(userId)){
throw new Exception("No UserID = no fun!");
}
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][0].ToString();
}
我認為更好的方法是使用ExecuteScalar ,因為您只使用了count。
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 Injection)
嘗試這個:
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
}
}
}
*請按照評論行
即使行數為零,它也將始終返回行。
嘗試
int number = dtmkeylength.Rows[0].Field<int>(0);
if (number > 0)
{
...
}
沒有使用選擇語句的DataTable
構造函數,這就是為什么它為空,而未選擇任何東西的原因!
可用的構造函數重載包括以下三個:
System.Data.DataTable dtmkeylength = new System.Data.DataTable();
要么
System.Data.DataTable dtmkeylength = new System.Data.DataTable("TableName);
要么
System.Data.DataTable dtmkeylength = new System.Data.DataTable("TableName", "tableNameSpace");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.