C# 如何在数组WinC窗体中存储SQL列
我想将从数据库中选择的值存储在数组中,以便对这些值进行计算。我编写了以下代码:C# 如何在数组WinC窗体中存储SQL列,c#,sql-server,C#,Sql Server,我想将从数据库中选择的值存储在数组中,以便对这些值进行计算。我编写了以下代码: string command = @"select I.Dist, I.ID, D.ID, D.Temp, CAST(D.Hmd as float) Hmd, CAST(D.ActEvp as float) ActEvp from
string command = @"select
I.Dist, I.ID, D.ID, D.Temp,
CAST(D.Hmd as float) Hmd,
CAST(D.ActEvp as float) ActEvp
from
IFiles I
inner join
(select
DFiles.ID, DFiles.Temp, DFiles.Hmd, DFiles.ActEvp
from
DFiles
where
FileName = '1') D on I.ID = CAST( D.ID as int)
where
FileName = 's1'
order by
CAST(I.Dist as float)";
SqlConnection con = new SqlConnection("Data Source=MyDB;Initial Catalog=Graphic;Integrated Security=True");
SqlCommand cmd = new SqlCommand(command, con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
con.Open();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
da.Fill(ds, "DFiles");
List<float> Hmd = new List<float>();
foreach(DataRow row in ds.Tables["DFiles"].Rows)
{
Hmd.Add(float.Parse(row["Hmd"].ToString()));
}
然而,我不认为这将是有效的,如果我这样做的每一个专栏。有更好的办法吗 第一步:定义DTO数据传输对象以保存从数据库读取的值:
public class DTO
{
public string Dist { get; set; }
public int ID { get; set; }
public int DID { get; set; }
public string Temp { get; set; }
public decimal Hmd { get; set; }
public decimal ActEvp { get; set; }
}
我不得不猜测这些值可能是什么数据类型-根据需要进行调整
第二步:将Dapper.Net安装到VisualStudio解决方案中最简单的方法是通过NuGet-on Github
第三步:使用Dapper使数据库访问更加简单:
就这些!现在,您有了一个合适的.NET列表,其中包含来自数据库的结果,您可以开始使用它们了。不是答案,但是sql查询在不嵌套第二个表的情况下表达得更好,如下所示:
select
I.Dist, I.ID, D.ID, D.Temp,
CAST(D.Hmd as float) Hmd,
CAST(D.ActEvp as float) ActEvp
from IFiles I
inner join DFiles D ON cast(D.ID as int) = I.ID AND D.FileName = '1'
where I.FileName = 's1'
order by CAST(I.Dist as float)
此外,看起来您正在为几个列使用字符串类型,这些列实际上应该首先存储为某种类型的数字。。。至少DFiles.ID和IFiles.Dist列很突出。这是模式的一个大问题。首先将这些值存储为int/float。是否要获取表中的列?是的,将它们保留在表中。请问,什么是ET?有几种方法:1使用像Dapper这样的微型ORM保留原始SQL语句,但是将结果自动转换成一个列表——然后Dapper为您完成了大部分关系数据到.NET类的映射;或2-使用SqlDataReader rdr=cmd.ExecuteReader,在数据读取器使用while rdr.read{…}读取的所有行上循环,并在while循环中创建对象并用从数据库读取的值填充它们的属性,这基本上就是Dapper为您所做的-如果您坚持,你可以全部编码yourself@Sajeetharan:我想获取所选值,这些值将是select语句的列。
select
I.Dist, I.ID, D.ID, D.Temp,
CAST(D.Hmd as float) Hmd,
CAST(D.ActEvp as float) ActEvp
from IFiles I
inner join DFiles D ON cast(D.ID as int) = I.ID AND D.FileName = '1'
where I.FileName = 's1'
order by CAST(I.Dist as float)