我创建了一个C#类,它运行正常。该类(此时)只查询SQL并返回结果。我有一种效果很好的方法。它返回一条记录,所以没有问题。但是,我有更复杂的查询返回 n 记录的数量,所以我把它们放在一个列表中。我已经使用了许多不同的组合来获取项目列表但总是遇到同样的事情:
一个场景将返回整个列表,但我无法遍历它,因为整个列表只是变成一个巨大的字符串。 (当我使用注释掉的返回(return string.Join(Environment.NewLine, imagePaths);
)
另一种情况是我尝试在列表上运行foreach
循环以逐个吐出项目。当我这样做时,它几乎就像只吐出一个字符(foreach / for loop的当前迭代。
所以我的问题是,如何进入我班级返回的列表并使其结构正确?
类
public static string getImagePaths(string connectionString, string album)
{
int numberOfImages = 0;
List<String> imagePaths = new List<String>();
SqlConnection sqlCon = new SqlConnection(connectionString);
SqlCommand sqlCom = new SqlCommand();
SqlDataReader reader;
sqlCom.CommandText = "SELECT ImagePath FROM myDB.myTable WHERE Album = '" + album + "'";
sqlCom.CommandType = CommandType.Text;
sqlCom.Connection = sqlCon;
sqlCon.Open();
reader = sqlCom.ExecuteReader();
if (reader.Read())
{
while (reader.Read())
{
numberOfImages += 1;
imagePaths.Add(reader.GetString(0));
}
sqlCon.Close();
//return string.Join(Environment.NewLine, imagePaths);
return imagePaths.ToString();
}
else
{
return "An error has ocurred";
}
}
代码背后
private string getImagePath(int imageId)
{
var connectionString = ConfigurationManager.ConnectionStrings["theImageDataBase"].ConnectionString;
var theAlbum = "searchTerm";
string images = Fetcher.getImagePaths(connectionString, theAlbum);
Response.Write(images);
return "";
}
我已经确认,只要表中实际有多少项,它就会得到正确的计数。还有另一种情况,我只是得到System.Collections.Generic.List
1 [System.String]`
我认为这是正确的方法,因为它似乎正在捡起实际的<List>
提前感谢任何有用的输入/指示。无法在网上找到太多帮助...
答案 0 :(得分:2)
在Fetcher中改变这个:
public static string getImagePaths(string connectionString, string album)
对此:
public static List<string> getImagePaths(string connectionString, string album)
然后回复:
return imagePaths;
//return imagePaths.ToString();
在代码隐藏中执行:
private string getImagePath(int imageId)
{
var connectionString = ConfigurationManager.ConnectionStrings["theImageDataBase"].ConnectionString;
var theAlbum = "searchTerm";
List<string> images = Fetcher.getImagePaths(connectionString, theAlbum);
foreach (var image in images)
Response.WriteLine(image);
return "";
}
这会在单独的一行上写出每个图像。我不知道你想对他们做什么,所以我不能进一步提出建议。