我有一个有4列的表格,我想只获取最后一列的行并用不同的标签显示它们
id username useraddress location comments
1 explename expleaddre1 va *NULL*
2 explename2 expleaddre2 ma mycomments
3 explename3 expleaddre3 la mycomments
4 explename4 expleaddre4 ka mycomments
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lbluserid.Text = Convert.ToInt32(dr.GetString(0)).ToString();
lblusername.Text = dr.GetString(1);
lblusertitle.Text = dr.GetString(2);
lst.Add(unt);
}
conn.Close();
我正在Unable to cast object of type 'System.Int32' to type 'System.String'.
我想使用datareader获取注释并在label1,label2,label3中显示它们(NULL除外)......
我尝试使用dr.getstring(),但它显示标准错误,例如..,dbnull
之外任何帮助表示赞赏
答案 0 :(得分:4)
当数据库中的字段包含null时,您在DataReader列中找到的值为DBNull.Value
处理此值的正确方法如下
int ordinalPos = reader.GetOrdinal("Comments");
if(!reader.IsDBNull(ordinalPos))
{
labelComment.Text = reader.GetString(ordinalPos);
}
else
{
labelComment.Text = "No comments found!";
}
这可以在Extension方法中进行转换,并添加一些不错的内容
public static class SqlDataReaderExtensions
{
public static string GetString(this SqlDataReader reader, string colName, string defIfNull)
{
int ordinalPos = reader.GetOrdinal(colName);
return (!reader.IsDBNull(ordinalPos) ? defIfNull : reader.GetString(ordinalPos));
}
}
用一个单行调用:
labelComment.Text = reader.GetString("Comments", "No comments found");
答案 1 :(得分:0)
using (SqlCommand command = new SqlCommand("SELECT * FROM YourTable", connection))
{
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
string comments = reader.GetString(4);
if (comments != null)
Console.WriteLine("Comments is {0}", comments);
// Assign Text property of your labels..
}
}