标签: data-access

在ASP.NET中从DB获取一行数据的最有效方法

我正在编写一种从数据库中返回"资产"行的方法.它包含字符串,整数和字节数组(可以是图像/电影/文档).

现在对于大多数行访问,我使用以下方法返回NameValueCollection,因为它是一个轻量级对象,易于使用和转换int和字符串.

        public static NameValueCollection ReturnNameValueCollection(Database db, DbCommand dbCommand)
    {

        var nvc = new NameValueCollection();

        using (IDataReader dr = db.ExecuteReader(dbCommand))
        {
            if (dr != null)
            {
                 while (dr.Read())
                 {
                     for (int count = 0; count < dr.FieldCount; count++)
                     {
                         nvc[dr.GetName(count)] = dr.GetValue(count).ToString();
                     }
                 }
            }
        }

        dbCommand.Dispose();
        return nvc.Count != 0 ? nvc : null;
    }
Run Code Online (Sandbox Code Playgroud)

现在我对这种数据访问的apporach通常是获得一个返回数据流的方法.

       public static DataRow ReturnDataRow(Database db, DbCommand dbCommand)
    {
        var dt = new DataTable();

        using (IDataReader dr = db.ExecuteReader(dbCommand))
            if (dr != null) dt.Load(dr); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net optimization data-access

5
推荐指数
1
解决办法
1万
查看次数

业务对象之间的过度访问和令人难以置信的资源饥饿关系.我怎样才能解决这个问题?

首先,这似乎是一个很长的问题.我认为不是......代码只是我目前正在做的事情的概述.这感觉不对,所以我正在寻找建设性的批评和警告,以及我能做些什么的陷阱和建议.

我有一个包含业务对象的数据库.
我需要访问父对象的属性.
我需要通过业务对象维护某种状态.

如果你看一下这些类,我认为访问修饰符是不对的.我不认为它的结构很好.大多数关系都是用公共属性建模的.SubAccount.Account.User.ID < - 所有这些都是公开的..

是否有更好的方法来建立类之间的关系而不是这样,所以它不是那么"公开"?

这个问题的另一部分是关于资源:

如果我要创建一个返回List的User.GetUserList()函数,并且我有9000个用户,当我调用GetUsers方法时,它将生成9000个User对象,并且内部将生成9000个新的AccountCollection对象.我该怎么做才能使这个项目不那么资源匮乏?

请找到下面的代码并将其撕成碎片.

public class User {

   public string ID {get;set;}
   public string FirstName {get; set;}
   public string LastName {get; set;}
   public string PhoneNo {get; set;}

  public AccountCollection accounts {get; set;}

  public User {
     accounts = new AccountCollection(this);
  }

  public static List<Users> GetUsers() {
     return Data.GetUsers();
  }

}

public AccountCollection : IEnumerable<Account> {
  private User user;

  public AccountCollection(User user) {
     this.user = user;
  }

  public IEnumerable<Account> GetEnumerator() {
     return Data.GetAccounts(user);
  } …
Run Code Online (Sandbox Code Playgroud)

c# data-access business-objects

5
推荐指数
1
解决办法
206
查看次数

使用EclipseLinkJpaDialect在Spring中将PersistenceException转换为DataAccessException

你好.我在这里解释了同样的问题

主要区别在于我使用EclipseLink作为JpaProvider.所以我将entityManagerFactory配置如下:

<bean id="entityManagerFactoryCont0" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceXmlLocation" value="classpath:META-INF/contratto-persistence-cont0.xml" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter"/>
    </property>
    <property name="jpaDialect">
        <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect" />
    </property>
</bean> 
Run Code Online (Sandbox Code Playgroud)

我注意到EclipseLink没有覆盖DefaultJpaDialect类的translateExceptionIfPossible方法,这很糟糕......

所以在我的测试用例中我有一个唯一的约束违规异常,调试控制流程显示了这个堆栈跟踪:

EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(RuntimeException) line: 282   
EclipseLinkJpaDialect(DefaultJpaDialect).translateExceptionIfPossible(RuntimeException) line: 120   
LocalContainerEntityManagerFactoryBean(AbstractEntityManagerFactoryBean).translateExceptionIfPossible(RuntimeException) line: 368   
ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(RuntimeException) line: 58   
DataAccessUtils.translateIfNecessary(RuntimeException, PersistenceExceptionTranslator) line: 213    
PersistenceExceptionTranslationInterceptor.invoke(MethodInvocation) line: 163   
ReflectiveMethodInvocation.proceed() line: 172
Run Code Online (Sandbox Code Playgroud)

通话的例外是:

javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: [BEA][Oracle JDBC Driver][Oracle]ORA-00001: unique constraint (JSP_OWN.IDX_MC_CC_RAPPORTI_02) violated
Run Code Online (Sandbox Code Playgroud)

返回的最后一个异常是一般的JpaSystemException:

org.springframework.orm.jpa.JpaSystemException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLIntegrityConstraintViolationException: …
Run Code Online (Sandbox Code Playgroud)

spring translation data-access exception eclipselink

5
推荐指数
0
解决办法
1507
查看次数

Java:处理大数据量的建议.(部分Deux)

好的.所以我有大量的二进制数据(比方说,10GB)分布在不同长度的一堆文件(比方说5000)上.

我正在编写一个Java应用程序来处理这些数据,我希望为数据访问建立一个好的设计.通常情况会是这样的:

  • 无论如何,在处理过程中将读取所有数据.
  • 每个文件(通常)按顺序读取,一次只需几千字节.但是,通常需要同时具有每个文件的前几千字节,或者同时具有每个文件的中间几千字节等.
  • 有时,应用程序需要随机访问一个或两个字节.

目前我使用RandomAccessFile类读取字节缓冲区(和ByteBuffers).我的最终目标是将数据访问封装到某个类中,以便它快速,我再也不用担心它了.基本功能是我将要求它从指定文件中读取数据帧,并且我希望在上述考虑因素的情况下最小化I/O操作.

典型访问的示例:

  • 给我所有文件的前10千字节!
  • 给我文件F的字节0到999,然后给我字节1到1000,然后给我2到1001等等,...
  • 从文件F开始给我一兆字节的数据,从这样的字节开始!

对优秀设计的任何建议?

java performance data-access

4
推荐指数
1
解决办法
3505
查看次数

为什么要从ADO切换到ADO.NET?

我有一些朋友是'老派'VB6数据库开发人员,我告诉他们有关.NET及其功能,特别是ADO.NET.

在我们的对话中,他们提出了以下原因:为什么他们宁愿坚持ADO而不是转向ADO.NET:

  • 数据集已断开连接(如果电源出现故障怎么办?)
  • 仍然需要编写相同数量的代码
  • 的新选项Dataset,BindingSource并且TableAdapter显得扑朔迷离
  • 以编程方式访问数据库编写相同的代码,所有更改都是该命令的布局方式

我正在寻找答案或理由为什么ADO.NET在Windows Forms应用程序方面的数据访问方面比ADO"更好".ADO.NET提供的ADO不是什么?它比ADO做得更好?

注意:我想要不涉及LINQ的示例.

vb.net vb6 data-access

4
推荐指数
3
解决办法
1007
查看次数

如何为我的公司创建通用的整体.NET编程结构?

我在一家公司,在没有现成的替代品的情况下编写自己的业务数据应用程序.最常见的是 - 登录屏幕 - 一些屏幕主要是SQL Server表格的可视化 - 一些报告

过去他们使用过MS Access.这些并不是最精英的程序员,但他们主要了解如何构建数据库以及他们想要的UI.

我们宁愿有一个通用的登录界面,菜单屏幕等,我们可以插入应用程序并开始使用.这应该有助于开发速度和可维护性.

当然,有多种方法可以做到这一点,而我们问题的核心似乎是数据访问.选项似乎包括:

1)GUI数据集/表适配器(如ASP.NET上的视频)向您展示如何操作.我们中的一些人已经做了很多这样的事情.适合开发速度.有时数据连接会在您不注意的情况下发生变化 巨大的方法签名(插入或更新时每个字段一个参数)容易出错.有时参数检测不正确.动态参数(例如,带有可选过滤器的报告)非常困难.

2)极为结构化的n层风格.例如,网格的数据源是对象的集合.表示层调用对象A中的静态方法,该方法调用数据访问层方法,该方法为从数据库返回的每一行实例化A. 需要为表中的每个字段设置get/set方法和内部变量以及构造函数变量.每个字段都会输入很多次.什么都没有任何限制.这个简单的应用可能有点过分.

3)通用表驱动所有通用函数,循环遍历字段列表以动态创建UPDATE和INSERT语句.选择主要是SELECT*类型的东西.快速发展但缺乏强大的打字让我感到害怕.似乎SQL注入地雷无处不在,但我确信将引号加倍是避免这种情况所需要的.

必须有更多的选择,但我不知道它们是什么.你对我/我们有什么建议吗?

.net data-access

4
推荐指数
1
解决办法
225
查看次数

我什么时候应该使用SQLTransaction

什么是使用SQLTransaction的适当时间?

我将它们用于所有 INSERT,UPDATE和DELETE语句.

这是正确的用法还是我有点矫枉过正?

.net data-access sqltransaction

4
推荐指数
1
解决办法
1756
查看次数

使用接口编写DAO类

我正在创建一个新的Web应用程序,它将使用一堆数据访问对象(DAO)类对数据进行CRUD操作.我知道当我有使用我的DAO类的外部用户/应用程序时,我应该编写java接口.但是如果没有这样的需求你认为我还应该编写接口吗?我将使用spring将DAO类注入Spring Controller(我正在使用Spring MVC)类.

java data-access data-access-layer

4
推荐指数
2
解决办法
6864
查看次数

从驱动器读取大部分文件

我正在使用C#中的大文件(可以达到可用内存的20%-40%),我只需要将一小部分文件一次加载到内存中(比如1-2%的文件) ).我在想使用FileStream是最好的选择,但是idk.我需要给出一个起点(以字节为单位)和一个长度(以字节为单位)并将该区域复制到byte []中.可能需要在线程之间共享对文件的访问,并且该文件将位于文件中的随机位置(非线性访问).我也需要快速.

该项目已经有unsafe方法,所以随时从C#更危险的一面建议事情

c# data-access file

4
推荐指数
1
解决办法
1万
查看次数

使用通用字典将值插入表中

编码平台:ASP.NET 2.0 WebForms,带有C#,MySQL作为后端

背景

我目前正在修复修复网站的错误.
其中一个表"注册"有80列.

插入/更新是通过简单的sql语句完成的,没有任何参数化查询.

问题

在注册时,用户可以改变许多参数,导致至少15种INSERT查询.我的问题是如何确保插入所有字段的正确值.

所以,我创造了一个

Dictionary<string, string> fields = new Dictionary<string, string>();

fields.Add("LoginEmail", MySQL.SingleQuoteSQL(txtLoginEmail.Text));
fields.Add("Password", MySQL.SingleQuoteSQL(txtLoginPassword.Text));

fields.Add("ContactName", MySQL.SingleQuoteSQL(txtContactName.Text));
fields.Add("City", MySQL.SingleQuoteSQL(txtCity.Text));
Run Code Online (Sandbox Code Playgroud)

我的想法是做一个像这样的简单插入查询

INSERT INTO registrations("all keys as comma separated string") VALUES ("all keys as comma separated string") 
Run Code Online (Sandbox Code Playgroud)

我的问题是

  1. Dictionary是实现此目的的最佳数据结构吗?
  2. 通用字典对键进行排序是否会更改查询中的键值索引?
  3. 将所有键提取到数组中的最佳方法以及将相应值提取到另一个匹配数组的方法.

还有,其他更好的方法是什么?

PS:我正在维护代码并使实体类将列映射到属性并且存储值不是一个选项.

c# architecture asp.net data-access data-structures

4
推荐指数
1
解决办法
8614
查看次数