如果 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 文本框值为空