的System.Data.DataRow

时间:2011-11-30 06:13:06

标签: asp.net

        [WebMethod]
    public List< string> HelloWorld(string prefixText)
    {
        SqlConnection con = new SqlConnection("Database=bluedd;Server=(local);Integrated Security=SSPI");
        con.Open();
        SqlCommand cmd = new SqlCommand("select user_master.first_name from user_master where first_name like @Name+'%'", con);
        cmd.Parameters.AddWithValue("@Name", prefixText);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        List<string> CountryNames = new List<string>();

        for (int i = 0; i < dt.Rows.Count; i++)
        {
           CountryNames.Add(dt.Rows[i].ToString());
        }
        return CountryNames;
    }

此代码返回System.Data.DataRow是否存在任何转换问题我在s / w开发中非常新,任何帮助都将受到赞赏

2 个答案:

答案 0 :(得分:1)

您的代码正在返回数据行。要返回列,您可以执行类似

的操作
CountryNames.Add(dt.Rows[i][0]);

我认为你想要的是用这个替换你的for循环。

        foreach(DataRow row in dt.Rows)
           {
              CountryNames.Add(row[0]);
           }
        return CountryNames;

答案 1 :(得分:1)

您需要告诉它行中的哪一列。 “System.Data.DataRow”是在行对象本身上调用.ToString()的结果。试试这个:

[WebMethod]
public List<string> HelloWorld(string prefixText)
{
    var result = new List<string>();
    using (var con = new SqlConnection("Database=bluedd;Server=(local);Integrated Security=SSPI"))
    {
        using (var cmd = new SqlCommand("select user_master.first_name from user_master where first_name like @Name+'%'", con))
       {
           cmd.Parameters.Add("@Name", SqlDbType.VarChar, 50).Value = prefixText;
           con.Open();
           using (var rdr = cmd.ExecuteReader())
           {
             while (rdr.Read())
               {
                 result.Add(rdr[0].ToString());
               }
           }
       }
    }
    return result;
}

请注意,我也进行了其他一些更改。你可能还不会理解所有这些,但我有理由为他们每个人。最重要的变化,以及你现在应该开始做的是using块。这些确保正确处理(关闭)某些对象。