C# 如何使用c将SQL SERVER数据库的varchar值检索到数组
我有一个数据库的名称费用,我已经宣布了不同的栏目说,监护费,电脑费,受理费等 现在我只想检索数组中tutionfee的值。所以我可以在任何地方使用它。我用的是CC# 如何使用c将SQL SERVER数据库的varchar值检索到数组,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我有一个数据库的名称费用,我已经宣布了不同的栏目说,监护费,电脑费,受理费等 现在我只想检索数组中tutionfee的值。所以我可以在任何地方使用它。我用的是C SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); SqlCommand check = new SqlCommand("select * from fees
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
SqlCommand check = new SqlCommand("select * from fees where admno = @admno", con);
如果您知道select命令的确切行数,则可以创建一个字符串数组,并使用它在循环中获取此列值 假设您的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++;
}
}
}
如果在编译时不知道数组大小,可以使用Select Count*。。。命令首先获取行数,或者您可以使用List代替。如果您知道select命令的确切行数,则可以创建字符串数组并使用在循环中获取此列值 假设您的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++;
}
}
}
如果在编译时不知道数组大小,可以使用Select Count*。。。命令以首先获取行计数,或者您可以使用列表来代替。这是我在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:增加了设置prameter值的注意事项。这是我在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());
}
}
}
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())
}
编辑1:资源更便宜的解决方案。
编辑2:增加了设置prameter值的注意事项。您可以使用SqlDataReader并循环所有行来构造所需的内容
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())
}
我更喜欢Linq,若需要,下面的代码将返回一个列表,并修改为包含所有表数据的数组
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();
}
}
}
所有属性都是字符串类型,但如果您知道列的类型,则可以使用它们。您可以使用SqlDataReader并循环所有行来构造所需的内容
SELECT CONVERT(varchar(6), tutionfee) + ',' AS 'data()'
FROM fees
FOR XML PATH('')
我更喜欢Linq,若需要,下面的代码将返回一个列表,并修改为包含所有表数据的数组
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();
}
}
}
所有属性都是字符串类型,但如果知道列的类型,则可以使用它们
SELECT CONVERT(varchar(6), tutionfee) + ',' AS 'data()'
FROM fees
FOR XML PATH('')
或
使用此查询,否则就可以了。现在您可以使用executescalar命令,返回值将是逗号分隔的列表,并使用result.split','轻松转换为数组
或
使用此查询,否则就可以了。现在您可以使用executescalar命令,返回值将是逗号分隔的列表,并使用result.split','轻松转换为数组 使用SqlCommand.ExecuteScalar方法并更改您的查询以仅返回tutionfee,如下所示:从费用中选择tutionfee,其中admno=@admnocollect数据表中的查询信息,并循环该数据表并将其分配到arrayuse SqlCommand.ExecuteScalar方法,并更改您的查询以仅返回tutionfee,如下所示:选择tutionfee从费用中,admno=@admnocollect在数据表中收集查询信息并循环该数据表并将其分配到arrayuse SqlCommand.ExecuteScalar方法中,并将查询更改为仅返回tutionfee,如下所示:从费用中,admno=@admnocollect在数据表中选择tutionfee并循环该数据表并分配这些信息我知道泛型集合更好,但不知道他对泛型有想法,这就是我给他simpest代码的原因我知道泛型集合更好,但不知道他对泛型有想法,这就是我给他simpest代码的原因我知道泛型集合更好,但不知道他对泛型有想法,这就是我给他的原因simpest code..此解决方案是好的,但不是好的,因为您假定了列索引。因为您没有正确释放资源。此解决方案是好的,但不是好的,因为您假定了列索引。因为您没有正确释放资源。此解决方案是好的,但不是好的,因为您假定了列索引。因为您没有正确释放资源。打开连接是不必要的,因为SqlDataReader会自动执行此操作。打开连接是不必要的,因为SqlDataReader会自动执行此操作。打开连接是不必要的,因为SqlDataReader会自动执行此操作。