簡體   English   中英

沒有計數數據表對象

[英]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
                }
            }
        }   

*請按照評論行

編輯
下面是您填充數據表方式的調試屏幕快照。 如您所見,dt將命令檢測為表名,而不是命令檢測為命令。
在此處輸入圖片說明

即使行數為零,它也將始終返回行。

嘗試

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

檢查以及示例如何使用DataTable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM