【问题标题】:Set empty string in TextBox if Database value is null in ASP.Net not working如果 ASP.Net 中的数据库值为空,则在 TextBox 中设置空字符串不起作用
【发布时间】:2021-12-01 08:11:04
【问题描述】:

我有代码读取数据库中的空行,如果数据库中没有行则 textbox = "0"

我的代码:

protected void CheckNota()
        {
            
            string vNota;
            using (SqlConnection con = new SqlConnection(constr))
            {
                using (SqlCommand cmd1 = new SqlCommand("select ISNULL ((KdNota), 0) as vKdNota from tProdukBeliHead where  KdNota = '" + txtKdBeli.Text.Trim() + "'", con))
                //using (SqlCommand cmd1 = new SqlCommand("select KdNota from tProdukBeliHead where  KdNota = '" + txtKdBeli.Text.Trim() + "'", con))
                {
                    using (SqlDataAdapter da = new SqlDataAdapter(cmd1))
                    {
                        DataTable dt = new DataTable();
                        da.Fill(dt);
                        if (dt.Rows[0]["vKdNota"] == DBNull.Value)
                        {
                            vNota = "0";
                        }
                        else
                        {
                            vNota = dt.Rows[0]["KdNota"].ToString();
                        }
                    }
                }
            }
}

但是文本框没有显示值 0,只报告这个:位置 0 没有行。

谢谢

【问题讨论】:

  • 您的代码假定有一行。如果您的查询未返回任何结果,则 dt.Rows[0] 将不存在。您应该检查数据表是否确实有行。看看这个:stackoverflow.com/questions/6264554/…
  • 使用适当的参数化,不要在查询中注入数据
  • 您没有在查询中选择KdNota。 KdNota vKdNota
  • 谢谢 squillman,现在工作

标签: c# asp.net sql-server


【解决方案1】:

dt.Rows[0] 不存在。那将是集合中的第一个条目,但集合是空的。因此,您正在尝试访问行条目以查看其值是否为空。相反,您应该检查集合本身是否为空。它应该是这样的

if (dt.Rows.Count == 0)
{
     vNota = "0";
}

【讨论】:

  • 感谢蝙蝠侠,现在开始工作
【解决方案2】:

试试这个 - 除非你要更新结果,否则不需要适配器。

因此:

void CheckNota()
{
    string vNota;
    using (SqlConnection con = new SqlConnection("your connect string"))
    {
        using (SqlCommand cmd1 = 
                new SqlCommand("select ISNULL(KdNota), 0) as vKdNota from tProdukBeliHead where KdNota = @kdNota", con))
        {
        DataTable dt = new DataTable();
        cmd1.Parameters.Add("@kdNota", SqlDbType.NVarChar).Value = txtKdBeli.Text;
        con.Open();
        dt.Load(cmd1.ExecuteReader());
        if (dt.Rows.Count > 0)
            vNota = dt.Rows[0]["vKdNota"].ToString();
        else
            vNota = "0";
        }
    }
}

仅供参考?我们节省了一些代码行,因此我们通过添加参数来交换节省的费用。这为我们提供了 sql 注入安全代码,并且还保存了一些代码行。而且我们也不必在 sql 中使用单引号以及实际上很难编写的串联!

【讨论】:

  • 感谢 Albert,您的代码也适用于我
猜你喜欢
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 2013-02-10
  • 2011-03-29
  • 1970-01-01
相关资源
最近更新 更多