如果 ASP.Net 中的数据库值为空,则在 TextBox 中设置空字符串不起作用

Posted

技术标签:

【中文标题】如果 ASP.Net 中的数据库值为空,则在 TextBox 中设置空字符串不起作用【英文标题】:Set empty string in TextBox if Database value is null in ASP.Net not working 【发布时间】: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] 将不存在。您应该检查数据表是否确实有行。看看这个:***.com/questions/6264554/… 使用适当的参数化,不要在查询中注入数据 您没有在查询中选择KdNota。 KdNota vKdNota 谢谢 squillman,现在工作 【参考方案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,您的代码也适用于我

以上是关于如果 ASP.Net 中的数据库值为空,则在 TextBox 中设置空字符串不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如果字段的值为空,则在 MySQL 中插入新记录,同时在不同的字段中添加 ID+1

如果值为空,则在输入 [type=text] 中不考虑空白值

发生带有 Jquery 对话框的邮箱时,asp.net 文本框值为空

ASP .NET MVC Redirecttoaction 将参数传递给 Index 但值为空

ef在asp.net中删除报值不能为空的原因

如果参数为空,则在 where 语句中的 TSQL 案例