[英]C# Get all names from SQL and return as a list
我试图更加熟悉SQL和C#,所以我正在开发一个简单的应用程序,现在我有一个已填充的SQL数据库,但是我想从Persons Table中获取我的所有姓名并将它们放在组合中框,但是当我尝试获取所有名称时,我只能获得表中的名字。 这就是我试图做到的。
using (SqlCommand sqlCommand = new SqlCommand("SELECT [Name] FROM [Persons].[dbo].[Test]", sqlConnection))
{
var names = sqlCommand.ExecuteScalar();
}
您实际上想像这样使用SqlDataReader
:
var names = new List<string>();
using (SqlCommand sqlCommand = new SqlCommand("SELECT [Name] FROM [Persons].[dbo].[Test]", sqlConnection))
{
using(var reader = sqlCommand.ExecuteReader())
{
while(reader.Read())
{
names.Add(reader["Name"].ToString());
}
}
}
请注意, ExecuteScalar
仅获取返回的第一行的第一列。
而不是ExecuteScalar,请执行以下操作:
using( var rdr = command.ExecuteReader() )
{
while( rdr.Read() )
{
var name = rdr.GetString(0);
}
}
改用ExecuteReader; 请确保在循环之外声明列表,否则将在需要时超出范围。
var names = new List<string>();
using (SqlCommand sqlCommand = new SqlCommand("SELECT [Name] FROM [Persons].[dbo].[Test]", sqlConnection))
{
var reader = command.ExecuteReader();
while (reader.Read())
{
names.Add(reader[0]);
}
}
sqlCommand.ExecuteScalar()
返回单个值,这是标量一词的含义。 您需要声明一个SqlDataReader rdr;
并通过rdr = sqlCommand.ExecuteReader()
对其进行初始化。 然后,您需要使用while循环遍历所有行,以检查阅读器是否有更多行可以通过while(rdr.Read())
进行读取。 这将通过返回值(a)通过返回值告诉您是否还有剩余的未读行(因此它是您的while条件),并且b)使读取器前进至第一条未读行。
我强烈推荐以下文章,以帮助您快速使用C#中的SqlCommand: http : //www.dotnetperls.com/sqlcommand
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.