Tag: sql server

如何将SQL数据库嵌入/附加到Visual C#中?

这是我第一次使用SQL,这可能是一个愚蠢的问题,但我做了一些研究,我不认为我找到了我正在寻找的东西。 我想要的是一种制作将在我的C#程序中使用的私有SQL数据库的方法。 我已经在SQL Server Express中创建了一个数据库,并将其连接到Visual Studio 2010。 SqlCommand DBAccess = new SqlCommand(); DBAccess.Connection = new SqlConnection( “Data Source = localhost;” + “Initial Catalog = My_Database;” + “Trusted_Connection = True”); 我可以将数据源嵌入到我的程序中,并将与其余解决方案一起编译吗? 关于该计划的一些额外背景; 这是一个程序,需要搜索数据库中的6个表,并在搜索字符串与特定字段匹配时输出DataRow的内容。 例如。 Field 1 Field 2 quick AA brown AA fox AB jumps AB over AA the AB lazy AB dog AA Search_String = […]

从一个数据库表复制到另一个C#

使用C#(vs2005)我需要将一个表从一个数据库复制到另一个数据库。 两个数据库引擎都是SQL Server 2005.对于远程数据库,源代码,我只对存储过程具有执行权限,以获取本地需要的数据。 本地数据库我有更多的控制权,因为[asp.net]应用程序需要这个远程表的本地副本。 我们希望它本地更容易查找和连接其他表等。 能否请您向我解释一种将这些数据复制到本地数据库的有效方法。 如果使事情更简单,则可以使用与远程表相同的模式创建本地表。 远程表有9列,其中没有一列是标识列。 远程表中大约有5400行,这个数字每年增加大约200行。 所以不是一个快速变化的表。

永远等待localhost!

我的主页上有一个gridview,其中包含一个视图和一个编辑链接,它们使用查询字符串分别在只读和可编辑页面中显示表数据。 我没有收到来自我的代码的错误消息,它很简单,似乎没有丢失任何东西,但是当我尝试在浏览器中调试或查看时,我在状态栏上获得永久风车并且消息“等待localhost ”。 我错过了什么? 有没有人对这个特殊问题有一些经验? 我在使用sql server 2008的可视工作室中使用C#和ASP.NET。

为什么数据库查询在应用程序中只会变慢?

我有一个网页,需要10分钟来对数据库运行一个查询,但从SQL Server Management Studio运行时,相同的查询返回不到一秒钟。 该网页只是在正在执行存储过程的数据库中触发SQL,而后者又在四个表上执行非常简单的选择。 代码再次是基本的ADO,在SqlCommand上设置CommandText,然后执行ExecuteReader来获取数据。 网页通常可以很快地运行,但是当它减慢时,加速它的唯一方法是对正在查询的表上的索引进行碎片整理(不同的时间不同),这在执行相同查询时似乎没有意义快速手动。 我已经看过这个问题,但它不适用,因为网页实际上只是在数据库中激活文本。 有没有人有任何好的想法为什么这种方式变慢而不是另一种方式? 谢谢

如何告知entity frameworkfunction导入存储过程返回的列不可为空?

我有一个SQL Server存储过程,它重新解决这个问题: CREATE PROCEDURE [jp].[GetFoo] @Guid UNIQUEIDENTIFIER AS SELECT CONVERT(BIT, (CASE WHEN [dbo].[GetBar](T.Col2) = 3 THEN 1 ELSE 0 END)) IsGetBarCol2EqualToThree FROM [dbo].[MyTable] T WHERE T.Col1 = @Guid 当我在EF中执行函数导入/获取列信息时,列IsGetBarCol2EqualToThree的推断类型是Nullable 。 但是这个领域不可能是空的,所以我希望它只是bool 。 有没有办法在更新时持续执行此操作(即不依赖于修改任何生成的代码)? SQL Server版本是2005,我使用Visual Studio 2010SP1和EF 4,项目是针对.net 4.0编译的。

TransactionScope TransactionAborted Exception – 事务未回滚。 应该是吗?

(SQL SERVER 2008)如果在TransactionScope(.Complete())中发生事务超时错误,您是否希望回滚事务? 更新: 错误实际上是在结束大括号(即.Dispose())中抛出,而不是.Complete()。 完整错误是: The transaction has aborted. System.Transactions.TransactionAbortedException TransactionAbortedException System.Transactions.TransactionAbortedException: The transaction has aborted. —> System.TimeoutException: Transaction Timeout — End of inner exception stack trace — at System.Transactions.TransactionStateAborted.BeginCommit(InternalTransaction tx, Boolean asyncCommit, AsyncCallback asyncCallback, Object asyncState) at System.Transactions.CommittableTransaction.Commit() at System.Transactions.TransactionScope.InternalDispose() at System.Transactions.TransactionScope.Dispose() 据我所知,事务没有回滚,表格保持锁定,直到我对SPID / session_id发出了KILL。 我使用DBCC OPENTRAN获取最早的事务,然后杀死它。 我已经尝试过KILL WITH STATUS但是收到一条消息,说明没有任何状态可用,因为没有回滚。 sys.dm_exec_sessions中SPID / session_id的状态为“正在hibernate”。 […]

ASP.NET 2.0-4.0 Web应用程序初始启动速度极慢。

(对不起,如果这是一个很长的问题,它说是具体的) 我工作的公司有很多站点,这些站点已经运行了一段时间没有问题。 这些应用程序混合使用ASP.NET 2.0,3.5和4.0,它们都使用ADO.NET连接到一个SQL Server Standard实例(在同一个Web服务器上),所有这些实例都是用IIS7托管的。 当我们转移到升级的网络服务器时,问题就出现了。 我们尽一切努力使用完全相同的设置来设置服务器,数据库实例和IIS(除了不同的机器名称,以及我们从SQLExpress升级到标准的事实),据我们所知,我们做了。 两台服务器都运行Windows Server 2008 R2(已应用所有当前更新),并收到默认安装。 启动其中一个应用程序时,问题非常明显。 当您到达我们应用程序的登录页面时,页面本身加载速度非常快。 即使从禁用IIS缓存的新计算机加载页面也是如此,即使缓存页面也不可能。 当您输入登录信息并单击登录按钮时,问题实际上是可见的。 由于我们的数据库设计(不是很好),登录过程必须访问许多数据库,理论上最多150个独立的数据库,但实际上通常是2.即使只打开2个数据库(最小),问题也会发生。 不是一个伟大的设计,但我们现在必须忍受它。 当尝试最初打开与数据库的连接时,无论您是连接到2 dbs还是40,整个过程每次都会停止大约20秒。我已经针对该进程运行了一个.NET分析器(jetbrains dottrace),并且我可以从中获取的唯一信息是,对sqlconnection.open()的一个或所有调用占90%的时间。 这只发生在第一次使用应用程序时,但问题更加复杂,因为IIS似乎忽略了我们为它设置的回收设置,并在闲置几分钟后回收应用程序,导致问题再次发生。 我还尝试使用SQL Server探查器来查看哪些数据库操作是导致速度减慢的原因,但是由于所有其他数据库活动,(以及我必须在生产服务器上执行此操作的事实,因为问题不会发生在我们的测试环境中)我无法确定导致停止的确切操作。 我将尝试深夜进入并关闭生产站点以运行SQL分析器,但我可能无法立即执行此操作。 在研究这个问题的过程中,我尝试了几种解决方案 认为它可能是名称解析问题,我尝试修改Web服务器上的hosts文件以及给连接字符串提供IP地址而不是要解析的服务器名称,没有区别。 我听说LLMNR协议导致这样的问题,但我认为尝试通过IP连接或解析主机文件应该已经消除了这种可能性,我承认我从未尝试过实际关闭LLMNR。 我在IIS中增加了空闲超时,回收间隔等,但这似乎没有得到尊重,更不用说解决问题了。 这使我相信有一个设置覆盖了计算机上的IIS应用程序设置。 多个其他代码修复,没有任何区别。 SqlServer设置是否导致问题? 其他我现在忘了的东西。 在帮助我解决这个问题时,我们将非常感谢任何想法,经验或行动者!

重写LINQ表达式查询以启用缓存SQL执行计划

在阅读有关entity framework性能的文章时,我发现了这条信息: 其次,问题[SQL Server不会重用执行计划]首先发生因为(由于实现细节)将int传递给Skip()和Take()方法,Entity Framework无法查看是否它们传递的绝对值如Take(100)或变量如Take(resultsPerPage),因此它不知道该值是否应该参数化。 建议的解决方案是改变这种代码风格: var schools = db.Schools .OrderBy(s => s.PostalZipCode) .Skip(model.Page * model.ResultsPerPage) .Take(model.ResultsPerPage) .ToList(); 在这种风格: int resultsToSkip = model.Page * model.ResultsPerPage; var schools = db.Schools .OrderBy(s => s.PostalZipCode) .Skip(() => resultsToSkip) //must pre-calculate this value .Take(() => model.ResultsPerPage) .ToList(); 这允许entity framework知道这些是变量,并且生成的SQL应该被参数化,这反过来允许重用执行计划。 我们的应用程序中有一些代码以相同的方式使用变量,但我们必须在运行时构建Expression,因为事先不知道类型。 以下是它过去的样子: var convertedId = typeof(T).GetConvertedIdValue(id); var prop = GetIdProperty(typeof(T)); […]

如何使用ADO.NET获取表中列的SqlDbType?

我试图在运行时确定sql server表列的SqlDbType是什么。 是否有一个类可以在System.Data.SqlClient中执行该操作,还是应该自己进行映射? 我可以从中获取字符串表示 SELECT DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_CATALOG = ‘{0}’ AND TABLE_SCHEMA = ‘{1}’ AND TABLE_NAME = ‘{2}’ AND COLUMN_NAME = ‘{3}’ 编辑:我不能使用SMO,因为我无法控制执行机器,所以我不能保证它将被安装。 (抱歉没有说清楚rp)。 编辑:在回答Joel时,我正在尝试创建一个我可以调用的函数,它会在传递SqlConnection,表名和列名时返回一个SqlDBType。

Dapper中间映射

在我之前的问题中略微更高级的映射:) 表: create table [Primary] ( Id int not null, CustomerId int not null, CustomerName varchar(60) not null, Date datetime default getdate(), constraint PK_Primary primary key (Id) ) create table Secondary( PrimaryId int not null, Id int not null, Date datetime default getdate(), constraint PK_Secondary primary key (PrimaryId, Id), constraint FK_Secondary_Primary foreign key (PrimaryId) references […]