使用C#.NET从Universe DB文件获取记录列表的最快方法是什么?
我想执行一个使用C#.NET从Universe DB文件获取记录列表的最快方法是什么?,universe,uniobjects,u2netdk,Universe,Uniobjects,U2netdk,我想执行一个SELECT查询,该查询只对Universe数据库进行一次点击,并快速高效地获取记录列表,然后将其添加到列表中 我尝试过使用U2DataAdapter以及U2DataReader,但不确定哪一个更有效 以下是用于执行SELECT查询的两种不同方法: 方法1: // Connection U2ConnectionStringBuilder csb = new U2ConnectionStringBuilder(); csb.Server = "server";
SELECT
查询,该查询只对Universe数据库进行一次点击,并快速高效地获取记录列表,然后将其添加到列表中
我尝试过使用U2DataAdapter
以及U2DataReader
,但不确定哪一个更有效
以下是用于执行SELECT
查询的两种不同方法:
方法1:
// Connection
U2ConnectionStringBuilder csb = new U2ConnectionStringBuilder();
csb.Server = "server";
csb.Database = "db";
csb.UserID = "user";
csb.Password = "pwd";
csb.ServerType = "UNIVERSE";
csb.AccessMode = "Native";
csb.RpcServiceType = "uvcs";
U2Connection con = new U2Connection(csb.ToString());
con.Open();
U2Command cmd = con.CreateCommand();
cmd.CommandText = "Action=Select;File=SOME.FILE;Attributes=COL1,COL2,COL3,COL4;Where=COL2=XYZ";
// Code to get the data
U2DataAdapter da = new U2DataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dt = ds.Tables[0];
var list = new List<T>();
// storing result in List<T>. this takes most of the time
foreach(DataRow dr in dt.Rows)
{
T obj = new T
{
col1 = item.ItemArray[0].ToString(),
col2 = item.ItemArray[1].ToString(),
col3 = item.ItemArray[2].ToString(),
col4 = item.ItemArray[3].ToString(),
};
list.Add(obj);
}
// Connection
U2ConnectionStringBuilder csb = new U2ConnectionStringBuilder();
csb.Server = "server";
csb.Database = "db";
csb.UserID = "user";
csb.Password = "pwd";
csb.ServerType = "UNIVERSE";
U2Connection con = new U2Connection(csb.ToString());
con.Open();
U2Command cmd = con.CreateCommand();
cmd.CommandText = "SELECT COL1,COL2,COL3,COL4 FROM SOME.FILE WHERE COL2= 'XYZ'";
// Code to get the data
var dr= cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
string col1 = dr.GetString(0);
string col2 = dr.GetString(1);
string col3 = dr.GetString(2);
string col4 = dr.GetString(3);
T obj = new T { col1, col2, col3, col4 };
list.Add(obj);
}
}
感谢您对如何改进上述任何一种方法的反馈,如果有比这两种方法更好的方法,请与我们分享。如果您还没有,我将查看U2.NET工具包提供的示例,希望您能够访问该工具包。安装目录中有一个samples文件夹。这提供了两个不同的例子
至于哪一个更好,这可能取决于您试图完成的任务和数据的状态。我使用了两种访问模式,它们都根据词典的状态工作。至于返回一个列表,如果您希望周围都是字符串,我想说这两种方法中的任何一种都可以工作,这只是性能测试的问题
我不想忽略类型,所以在上面的例子中,我希望它返回一个DataTable或List之类的东西。我认为这取决于你需要它在哪里成为一个对象,以及你只需要在哪里显示一些数据
就我个人而言,我一直在使用实体框架来解决这个问题,因此它会提前解决键入问题,并鼓励您更加注意字典项。当您的元数据是好的,或者您有足够的控制权使其变得好时,这种方法就可以工作。然后,您可以使用Linq查询并返回一个列表,然后对其进行抽象。我通常有一个接口模式,用于指向Get、GetAll>、Upsert>
首先,我创建文件的模型。在表中引用文件名,在列属性中引用属性的字典名。您甚至可以使用I-Types,如图所示
[Table("MY.FILE)]
public class MyFile
{
[Key]
[Column("MyAttribute0", Order = 1)]
public string RecordID { get; set; }
[Column("MyAttribute1")]
public decimal RecordData1 { get; set; }
Column("MyAttribute2")]
public decimal RecordData2 { get; set; }
Column("MyAttribute3")]
public decimal RecordData2 { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
Column("MYITYPE1")]
public decimal MyIType1{ get; set; }
}
然后在数据库的dbContext中,确保引用此模型。根据示例,您将使用连接字符串对此进行设置
public DbSet<MyFile> MyFiles { get; set; }
祝你好运 如果您还没有,我将查看U2.NET工具包提供的示例,希望您能够访问该工具包。安装目录中有一个samples文件夹。这提供了两个不同的例子
至于哪一个更好,这可能取决于您试图完成的任务和数据的状态。我使用了两种访问模式,它们都根据词典的状态工作。至于返回一个列表,如果您希望周围都是字符串,我想说这两种方法中的任何一种都可以工作,这只是性能测试的问题
我不想忽略类型,所以在上面的例子中,我希望它返回一个DataTable或List之类的东西。我认为这取决于你需要它在哪里成为一个对象,以及你只需要在哪里显示一些数据
就我个人而言,我一直在使用实体框架来解决这个问题,因此它会提前解决键入问题,并鼓励您更加注意字典项。当您的元数据是好的,或者您有足够的控制权使其变得好时,这种方法就可以工作。然后,您可以使用Linq查询并返回一个列表,然后对其进行抽象。我通常有一个接口模式,用于指向Get、GetAll>、Upsert>
首先,我创建文件的模型。在表中引用文件名,在列属性中引用属性的字典名。您甚至可以使用I-Types,如图所示
[Table("MY.FILE)]
public class MyFile
{
[Key]
[Column("MyAttribute0", Order = 1)]
public string RecordID { get; set; }
[Column("MyAttribute1")]
public decimal RecordData1 { get; set; }
Column("MyAttribute2")]
public decimal RecordData2 { get; set; }
Column("MyAttribute3")]
public decimal RecordData2 { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
Column("MYITYPE1")]
public decimal MyIType1{ get; set; }
}
然后在数据库的dbContext中,确保引用此模型。根据示例,您将使用连接字符串对此进行设置
public DbSet<MyFile> MyFiles { get; set; }
祝你好运 两个问题:1)实体框架的速度不是很慢吗?2) 我们可以在Universe DB上使用实体框架核心吗?1.)这取决于您正在做什么,因为在我的经验中,基本的Universe CRUD是非常合理的。2.)Rocket U2 Toolkit for.NET需要.NET framework 4或更高版本,所以Core可能无法工作。两个问题:1)Entity framework的速度不是很慢吗?2) 我们可以在Universe DB上使用实体框架核心吗?1.)这取决于您正在做什么,因为在我的经验中,基本的Universe CRUD是非常合理的。2.)Rocket U2 Toolkit for.NET需要.NET framework 4或更高版本,所以核心可能无法工作。