Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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# 如何使用SqlDataReader读取SQL Server表的三列并将值存储在双[,]数组中_C#_Sql_Sql Server - Fatal编程技术网

C# 如何使用SqlDataReader读取SQL Server表的三列并将值存储在双[,]数组中

C# 如何使用SqlDataReader读取SQL Server表的三列并将值存储在双[,]数组中,c#,sql,sql-server,C#,Sql,Sql Server,我在SQL Server中有一个表,它将x,y,z值存储为浮点数,我希望获取这些值并将它们存储在三维数组中 我一直在搜索,我看到人们会向列表中添加值,因为我们不知道可以获得多少项,例如: List<int> list = new List<int>(); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { list.Add(reader

我在SQL Server中有一个表,它将
x,y,z
值存储为浮点数,我希望获取这些值并将它们存储在三维数组中

我一直在搜索,我看到人们会向列表中添加值,因为我们不知道可以获得多少项,例如:

List<int> list = new List<int>();

using (SqlDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
         list.Add(reader.GetInt32(0));
    }    
}
return list.ToArray();
List List=新列表();
使用(SqlDataReader=cmd.ExecuteReader())
{
while(reader.Read())
{
list.Add(reader.GetInt32(0));
}    
}
return list.ToArray();
但我不知道是否有可能读取表并立即获取和存储元素

我试图得到三张这样的名单:

List<double> xValuesList = (from IDataRecord r in dataReader
                     select (double)r["xVal"]
                    ).ToList();

List<double> yValuesList = (from IDataRecord r in dataReader
                     select (double)r["yVal"]
                    ).ToList();
List<double> zValuesList = (from IDataRecord r in dataReader
                     select (double)r["zVal"]
                    ).ToList();
public class Point3D
{
    public readonly double X;
    public readonly double Y;
    public readonly double Z;

    public Point3D(double x, double y, double z)
    {
        X = x;
        Y = y;
        Z = z;
    }
}
List xValuesList=(来自dataReader中的IDataRecord r
选择(双)r[“xVal”]
).ToList();
列表yValuesList=(来自dataReader中的IDataRecord r
选择(双)r[“yVal”]
).ToList();
列表zValuesList=(来自dataReader中的IDataRecord r
选择(双)r[“zVal”]
).ToList();
然后循环并从所有这3个列表中获得一个三维数组


但我认为使用struct或其他东西会更好,但我不知道如何做到这一点

如果我正确理解了您的问题,请尝试创建如下类:

List<double> xValuesList = (from IDataRecord r in dataReader
                     select (double)r["xVal"]
                    ).ToList();

List<double> yValuesList = (from IDataRecord r in dataReader
                     select (double)r["yVal"]
                    ).ToList();
List<double> zValuesList = (from IDataRecord r in dataReader
                     select (double)r["zVal"]
                    ).ToList();
public class Point3D
{
    public readonly double X;
    public readonly double Y;
    public readonly double Z;

    public Point3D(double x, double y, double z)
    {
        X = x;
        Y = y;
        Z = z;
    }
}
并将表中的数据直接读取到此类的实例列表中,如下所示:

List<Point3D> list = new List<Point3D>();

using (SqlDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        list.Add(new Point3D(reader.GetDouble(0), reader.GetDouble(1), reader.GetDouble(2)));
    }    
}
List List=新列表();
使用(SqlDataReader=cmd.ExecuteReader())
{
while(reader.Read())
{
添加(新的Point3D(reader.GetDouble(0)、reader.GetDouble(1)、reader.GetDouble(2));
}    
}

您确定需要一个三维数组而不是一个包含三个元素的元组吗?如果我已经有一个名为Point的结构,但有其他属性,如何更改代码以使其正常工作
public struct Point:IEquatable,IComparable{public double\u X;public double\u Y;public double\u Z;//getters setters和constructor…
因此如果select语句是
string lcQuery=“select X,Y,Z FROM cmYTAB,其中inId=”“+id+”;
我将通过
reader.GetDouble(0)获取值,reader.GetDouble(1),reader.GetDouble(2)
right?是的,对!您还应该将这些值传递给
类的构造函数。