C# SqlDataReader空异常
我有一个SqlDataReader,它可以填充多个文本框,但问题是当它们为空时,我会遇到一个异常,我不知道如何处理C# SqlDataReader空异常,c#,sql,sql-server,winforms,C#,Sql,Sql Server,Winforms,我有一个SqlDataReader,它可以填充多个文本框,但问题是当它们为空时,我会遇到一个异常,我不知道如何处理 SqlCommand command = new SqlCommand("SELECT * FROM zajezd WHERE akce='" + akce + "' and rocnik='" + klientClass.Rocnik() + "'", spojeni); spojeni.Open(); SqlDa
SqlCommand command = new SqlCommand("SELECT * FROM zajezd WHERE akce='" + akce + "' and rocnik='" + klientClass.Rocnik() + "'", spojeni);
spojeni.Open();
SqlDataReader read= command .ExecuteReader();
if (read.Read())
{
s_ub_cen.Text = read.GetDecimal(59).ToString();
object nulldate = (s_ub_dat.Text = read.IsDBNull(61) ?
string.Empty : read.GetDateTime(61).ToShortDateString());
}
异常:System.Data.SqlTypes.SqlNullValueException:数据为空。
我有20个文本框,有没有简单的解决办法?当值为null时,我想将文本框留空,ShortDatString的一切都正常工作
我需要弄清楚当DB中的值为NULL时如何处理这种情况:
s_ub_cen.Text = precti2.GetDecimal(59).ToString();
非常感谢你 您需要检查:
另外,通过使用SQL参数防止SQL注入,不要连接字符串来构建SQL查询
而不是:
SqlCommand command = new SqlCommand("SELECT * FROM zajezd WHERE akce='" + akce + "' and rocnik='" + klientClass.Rocnik() + "'", spojeni);
这:
编辑
有什么解决方案可以解决20个文本框的问题吗
一般来说,没有自动性。必须为每个动态输入提供一个sql参数
但是,如果您正在寻找一种获得“安全字符串”的优雅方法,则可以使用以下扩展:
public static class DataExtensions
{
public static string GetSafeString(this SqlDataReader reader, int colIndex)
{
if (!reader.IsDBNull(colIndex))
return reader[colIndex].ToString();
else
return string.Empty;
}
}
您可以通过以下方式使用此方法:
_ub_cen.Text = reader.GetSafeString(59);
哎哟-通过连接进行SQL注入什么是
precti2
如果read
已经是SqlDataReader
?您在第二列上检查null-为什么不是第一列?我发现对20个文本框进行此操作很难。我只是想问是否有更好的解决方案。谢谢你的回答,有没有解决20个文本框问题的方案?因为这应该在每个文本框中实现,对吗?@Marek:您必须为每个动态(用户)输入添加一个sql参数,所以不,没有自动功能。@Marek:编辑我的答案以提供一种可能有助于缩短代码的方法。
public static class DataExtensions
{
public static string GetSafeString(this SqlDataReader reader, int colIndex)
{
if (!reader.IsDBNull(colIndex))
return reader[colIndex].ToString();
else
return string.Empty;
}
}
_ub_cen.Text = reader.GetSafeString(59);