[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是否存在任何强制转换问题
我是软件开发的新手,任何帮助都将不胜感激
发布于 2011-11-30 14:19:06
您的代码将返回数据行。要返回该列,您可以执行如下操作
CountryNames.Add(dt.Rows[i][0]);我认为你想要的是用这个替换你的for循环。
foreach(DataRow row in dt.Rows)
{
CountryNames.Add(row[0]);
}
return CountryNames;发布于 2011-11-30 14:20:34
您需要告诉它行中的哪一列。"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块,也是您现在应该开始做的事情。这些方法可以确保正确地处理(关闭)特定的对象。
https://stackoverflow.com/questions/8321855
复制相似问题