Tag: ado.net

将DataColumn.DataType转换为SqlDbType

是否有转换器从DataColumn.DataType转到SqlDbType? 或者我必须写一个方法来做它?

获取给定EntityType的导航属性

我使用的是VS2010,EF4.0 。 需要如下function。 private string[] GetNaviProps(Type entityType)//eg typeof(Employee) { NorthwindEntities en = new NorthwindEntities(); //here I return all Properties only for example return entityType.GetProperties().Select(p=>p.Name).ToArray(); //should return Orders,Territories… } 我已经检查了这个 ,但IObjectContextAdapter在EF6.0和.net4.5中看起来很像。 我试着像它一样替换它 var workspace = en.MetadataWorkspace; 所以它可以编译,但是然后在第3行抛出exception。 有帮助吗?

如何将DBNull值传递给参数化的SELECT语句?

我在C#(针对SQL Server 2k8运行的.NET Framework 4)中有一个SQL语句,如下所示: SELECT [Column1] FROM [Table1] WHERE [Column2] = @Column2 以上查询可以使用以下ADO.NET代码正常工作: DbParameter parm = Factory.CreateDbParameter(); parm.Value = “SomeValue”; parm.ParameterName = “@Column2”; //etc… 但是,如果我将DBNull.Value分配给DbParameter的Value成员,即使Column2中有空值,此查询也返回零行。 如果我更改查询以特别适应null测试: SELECT [Column1] FROM [Table1] WHERE [Column2] IS @Column2 我在运行时遇到“@ Column2’附近的语法错误”exception。 我无法在SELECT语句的WHERE子句中使用null或DBNull作为参数吗?

ADO.NET中断开连接方法的确切含义是什么

我正在学习ADO.Net。 我读了这一行: – DataReader是“连接”方法,数据集是“断开连接”方法 从这句话我得出这样的结论:在数据阅读器中我们需要建立与数据库的连接,而在数据集中我们不需要建立与数据库的连接。 但是如果没有建立连接就可以访问数据。我知道我没有得到确切的含义。 请任何人可以通过示例告诉我确切的含义。

如何在C#数据访问层中确定存储过程输出参数的大小属性

我已经使Castle Project的ActiveRecord实现无耻地建模数据访问层。 为了使它获得认可,它必须支持在我的组织中使用的大量存储过程库,这些库已被编写为使用可以想象的每个输入/输出结构,包括每种可能的数据类型的返回值和输出参数。 我的问题是开发代码,将输出参数添加到用于执行存储过程的Command对象的参数集合中。 现在我只是使用一个大的默认值,希望它足以捕获所有的情况,但这感觉粗制滥造。 如何提前知道输出参数的长度? 这是我的DAL类,使用属性来表示输出参数: [StoredProcedure(“usp_PostARTransaction”, OperationType.Insert)] public class ARTranPost : DataObjectBase { [StoredProcedureParameter(“sARTranID”,OperationType.Insert,ParameterDirection.Output)] public string ARTranID {get;set;} [StoredProcedureParameter(“sDueDate”, OperationType.Insert, ParameterDirection.Input)] public string DueDate { get; set; } [StoredProcedureParameter(“sPostDate”, OperationType.Insert, ParameterDirection.Input)] public string PostDate { get; set; } } 我是否需要使用SMO或其他库来从数据库中获取长度?

如何使用C#获取列的Sql Server 2005描述?

我可以在C#中使用“Microsoft.SqlServer.Management.Smo.Table”来获取Sql Server 2005数据库的表列。 我有column.Name,但是如何在C#中获取列的描述? 我看到了链接: SQL Server:提取表元数据(描述,字段及其数据类型) 但是如何使用C#“Microsoft.SqlServer.Management.Smo”dll来获取列的描述?

ADO.NET问题:何时使用DataReader,DataAdapter

我只是想知道,在使用DataReader和DataAdapter从数据库中获取数据时我需要考虑哪些事情,而另外两个之间的区别是datareader需要打开连接而datadapter不需要…在我们的项目中,使用了DataReader我们所有的DAL,我们从不使用dataadapter。 所以我想知道使用DataAdapter + Datatable组合比使用DataReader更好的情况。 提前致谢。

orm和ADO.net有什么区别?

我正在读一本书,它说:“如果你通过使用ADO.NET访问你的数据库来创建你自己的数据访问层,那么无论数据模式是否存在,你都会受到的影响微乎其微。但是如果你使用的是O. / RM,您的灵活性将受到您使用的工具的限制“。 ADO.NET和任何其他ORM之间的主要区别是什么?

TransactionScope助手无故耗尽连接池 – 帮助?

前段时间我问了一个关于TransactionScope升级到MSDTC的问题,当时我还没想到。 ( 上一个问题 ) 简而言之,在SQL2005中,为了使用TransactionScope,您只能在TransactionScope的生命周期内实例化并打开一个SqlConnection。 使用SQL2008,您可以实例化多个SqlConnections,但在任何给定时间只能打开一个SqlConnections。 SQL2000将始终升级到DTC …我们的应用程序中不支持SQL2000,一个WinForms应用程序,BTW。 我们对单连接问题的解决方案是创建一个名为LocalTransactionScope(又名’LTS’)的TransactionScope助手类。 它包装了一个TransactionScope,最重要的是,它为我们的应用程序创建并维护了一个SqlConnection实例。 好消息是,它可以工作 – 我们可以在不同的代码片段中使用LTS,它们都加入了环境事务。 非常好。 问题是,创建的每个根 LTS实例都将创建并有效地从连接池中终止连接。 通过’有效杀死’我的意思是它将实例化一个SqlConnetion,它将打开一个新连接(无论出于何种原因,它永远不会重用来自池的连接),并且当该根LTS被释放时,它会关闭并处理SqlConnection,这是应该将连接释放回池中以便可以重复使用,但是,它显然永远不会被重用。 池膨胀直到最大化,然后在建立max-pool-size + 1连接时应用程序失败。 下面我附上了一个精简的LTS代码版本和一个示例控制台应用程序类,它将演示连接池耗尽。 要观察连接池膨胀,请使用SQL Server Managment Studio的“活动监视器”或此查询: SELECT DB_NAME(dbid) as ‘DB Name’, COUNT(dbid) as ‘Connections’ FROM sys.sysprocesses WITH (nolock) WHERE dbid > 0 GROUP BY dbid 我在这里附加LTS,以及一个示例控制台应用程序,您可以使用它来演示它将使用池中的连接并且永远不会重复使用也不会释放它们。 您需要为LTS添加对System.Transactions.dll的引用以进行编译。 注意事项:它是打开和关闭SqlConnection的根级LTS,它始终在池中打开一个新连接。 嵌套LTS实例没有区别,因为只有根LTS实例建立了SqlConnection。 如您所见,连接字符串始终相同,因此应重用连接。 是否有一些我们没有遇到的神秘条件导致连接不被重复使用? 除了彻底改变之外,还有其他解决办法吗? public sealed class LocalTransactionScope […]

附加更新entity framework

我正在尝试使用附加使用EF 5.x对表进行更新。 此表具有所需的其他字段,但它是现有行。 所以我试图更新,没有任何提取。 userid是表的主键。 我正在尝试更新状态。 但它会抛出一个EntityValidationErrors,表示需要密码,这是另一个必填字段,但不是主键。 由于这是对现有行的更新,为什么需要提供需要更新的字段? var webUser = new WebUser() { UserId = webUserId, OnlineStatus = (sbyte)status }; using (var dbxupdate = new xEntities()) { try { dbxupdate.WebUsers.Attach(webUser); dbxupdate.Entry(webUser).State = EntityState.Modified; dbxupdate.Entry(webUser).Property(x => x.OnlineStatus).IsModified = true; dbxupdate.SaveChanges(); } catch (DbEntityValidationException dbEx) { foreach (var validationErrors in dbEx.EntityValidationErrors) { foreach (var validationError in […]