如何使用c#将SQL SERVER数据库的varchar值检索到数组

本文关键字:varchar 检索 数组 数据库 何使用 SQL SERVER | 更新日期: 2023-09-27 17:53:06

我有一个数据库名称"费用",我在其中声明了不同的列,如学费、计算机费、许可费等。

现在我只想检索一个数组的tutionfee值。所以我可以在任何地方使用它。我正在使用C#

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
SqlCommand check = new SqlCommand("select * from fees where admno = @admno", con);

如何使用c#将SQL SERVER数据库的varchar值检索到数组

如果您知道select命令的确切行数,则可以创建一个字符串数组,并使用SqlDataReader在循环中获取此列值。

假设您的select语句返回10行,您可以像这样使用它;

var array = new string[10];
using(var con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
using(var check = new SqlCommand("select * from fees where admno = @admno", con))
{
    // Add your parameter value.
    using(var reader = check.ExecuteReader())
    {
       int i = 0;
       while(reader.Read())
       {
          array[i] = reader.GetString(reader.GetOrdinal("tutionfee")); 
          i++;
       }
    }
}

如果在编译时不知道数组的大小,可以先使用ExecuteScalarSelect Count(*)...命令来获取行数,也可以使用List<string>

这是我在assoc数组中找到的解决方案:

List<string> tutionfees = new List<string>();
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
using (SqlCommand comm = new SqlCommand("select * from fees where admno = @admno", conn))
{
    comm.Parameters.AddWithValue("@admno", "value"); //set your value
    using (SqlDataReader rdr = comm.ExecuteReader())
    {
        while (rdr.Read())
        {
            tutionfees.Add(rdr["tutionfee"].ToString());
        }
    }
}

编辑1:资源更多、价格低廉的解决方案
编辑2:增加了设置婴儿车值的考虑因素。

SELECT CONVERT(varchar(6), tutionfee) + ',' AS 'data()' 
FROM fees
FOR XML PATH('')

declare @ID varchar(max)='' 
select @ID=@ID + Convert(varchar(6),ID) +',' from  INDEXES
select @ID

使用此查询,否则即可。因此,现在您可以使用execute标量命令,返回值将是逗号分隔的列表,并使用result.split(','); 轻松转换为数组

您可以使用SqlDataReader并遍历所有行来构建所需内容。

我更喜欢Linq,下面的代码返回一个包含所有表数据的List(若需要,请修改为Array(。

using (var con = new SqlConnection(cnString))
{   
    using (var cmd = new SqlCommand("select * from fees where admno = @admno", con))
    {
        cmd.Parameters.Add("@admno", SqlDbType.Varchar, "");
        using (var reader = cmd.ExecuteReader())
        {           
            return reader.Select(r => new 
                          {
                              TutionFee= r["tutionfee"] is DBNull ? null : r["tutionfee"].ToString(),
                              ComputerFee= r["computerfee"] is DBNull ? null : r["computerfee"].ToString(),
                              AdmissionFee= r["admissiofee"] is DBNull ? null : r["admissiofee"].ToString()
                          }).ToList();
        }
    }
}

所有属性都是string类型,但如果您知道列的Type,则可以使用它们。

        SqlConnection con = new  SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        SqlCommand check = new SqlCommand("select * from fees where admno = @admno", con);          
           SqlDataReader rdr = null;
            rdr = check.ExecuteReader();
         ArrayList  array= new ArrayList();
            while(rdr.Read())
            {
                array.Add(rdr["tutionfee"].ToString())
            }