如何正确使用dr.GetString()?

时间:2013-05-17 22:08:22

标签: c# asp.net sql

我有一个有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

之外

任何帮助表示赞赏

2 个答案:

答案 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..
    }
}