Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在数组WinC窗体中存储SQL列_C#_Sql Server - Fatal编程技术网

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)