我正在编写一种从数据库中返回"资产"行的方法.它包含字符串,整数和字节数组(可以是图像/电影/文档).
现在对于大多数行访问,我使用以下方法返回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) 首先,这似乎是一个很长的问题.我认为不是......代码只是我目前正在做的事情的概述.这感觉不对,所以我正在寻找建设性的批评和警告,以及我能做些什么的陷阱和建议.
我有一个包含业务对象的数据库.
我需要访问父对象的属性.
我需要通过业务对象维护某种状态.
如果你看一下这些类,我认为访问修饰符是不对的.我不认为它的结构很好.大多数关系都是用公共属性建模的.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) 你好.我在这里解释了同样的问题
主要区别在于我使用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) 好的.所以我有大量的二进制数据(比方说,10GB)分布在不同长度的一堆文件(比方说5000)上.
我正在编写一个Java应用程序来处理这些数据,我希望为数据访问建立一个好的设计.通常情况会是这样的:
目前我使用RandomAccessFile类读取字节缓冲区(和ByteBuffers).我的最终目标是将数据访问封装到某个类中,以便它快速,我再也不用担心它了.基本功能是我将要求它从指定文件中读取数据帧,并且我希望在上述考虑因素的情况下最小化I/O操作.
典型访问的示例:
对优秀设计的任何建议?
我有一些朋友是'老派'VB6数据库开发人员,我告诉他们有关.NET及其功能,特别是ADO.NET.
在我们的对话中,他们提出了以下原因:为什么他们宁愿坚持ADO而不是转向ADO.NET:
Dataset,BindingSource并且TableAdapter显得扑朔迷离我正在寻找答案或理由为什么ADO.NET在Windows Forms应用程序方面的数据访问方面比ADO"更好".ADO.NET提供的ADO不是什么?它比ADO做得更好?
注意:我想要不涉及LINQ的示例.
我在一家公司,在没有现成的替代品的情况下编写自己的业务数据应用程序.最常见的是 - 登录屏幕 - 一些屏幕主要是SQL Server表格的可视化 - 一些报告
过去他们使用过MS Access.这些并不是最精英的程序员,但他们主要了解如何构建数据库以及他们想要的UI.
我们宁愿有一个通用的登录界面,菜单屏幕等,我们可以插入应用程序并开始使用.这应该有助于开发速度和可维护性.
当然,有多种方法可以做到这一点,而我们问题的核心似乎是数据访问.选项似乎包括:
1)GUI数据集/表适配器(如ASP.NET上的视频)向您展示如何操作.我们中的一些人已经做了很多这样的事情.适合开发速度.有时数据连接会在您不注意的情况下发生变化 巨大的方法签名(插入或更新时每个字段一个参数)容易出错.有时参数检测不正确.动态参数(例如,带有可选过滤器的报告)非常困难.
2)极为结构化的n层风格.例如,网格的数据源是对象的集合.表示层调用对象A中的静态方法,该方法调用数据访问层方法,该方法为从数据库返回的每一行实例化A. 需要为表中的每个字段设置get/set方法和内部变量以及构造函数变量.每个字段都会输入很多次.什么都没有任何限制.这个简单的应用可能有点过分.
3)通用表驱动所有通用函数,循环遍历字段列表以动态创建UPDATE和INSERT语句.选择主要是SELECT*类型的东西.快速发展但缺乏强大的打字让我感到害怕.似乎SQL注入地雷无处不在,但我确信将引号加倍是避免这种情况所需要的.
必须有更多的选择,但我不知道它们是什么.你对我/我们有什么建议吗?
什么是使用SQLTransaction的适当时间?
我将它们用于所有 INSERT,UPDATE和DELETE语句.
这是正确的用法还是我有点矫枉过正?
我正在创建一个新的Web应用程序,它将使用一堆数据访问对象(DAO)类对数据进行CRUD操作.我知道当我有使用我的DAO类的外部用户/应用程序时,我应该编写java接口.但是如果没有这样的需求你认为我还应该编写接口吗?我将使用spring将DAO类注入Spring Controller(我正在使用Spring MVC)类.
我正在使用C#中的大文件(可以达到可用内存的20%-40%),我只需要将一小部分文件一次加载到内存中(比如1-2%的文件) ).我在想使用FileStream是最好的选择,但是idk.我需要给出一个起点(以字节为单位)和一个长度(以字节为单位)并将该区域复制到byte []中.可能需要在线程之间共享对文件的访问,并且该文件将位于文件中的随机位置(非线性访问).我也需要快速.
该项目已经有unsafe方法,所以随时从C#更危险的一面建议事情
编码平台: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)
我的问题是
还有,其他更好的方法是什么?
PS:我正在维护代码并使实体类将列映射到属性并且存储值不是一个选项.
data-access ×10
c# ×4
.net ×2
asp.net ×2
java ×2
architecture ×1
eclipselink ×1
exception ×1
file ×1
optimization ×1
performance ×1
spring ×1
translation ×1
vb.net ×1
vb6 ×1