[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开发中非常新,任何帮助都将受到赞赏
答案 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
块。这些确保正确处理(关闭)某些对象。