Tag: sql server

C#控制台应用程序无效的操作exception

using System; using System.Collections.Generic; using System.Text; using System.Data.Sql; using System.Data.SqlClient; namespace BissUpdater { class Program { static void Main(string[] args) { string connectionString = “Data Source=H….; Initial Catalog=LANDesk; Persist Security Info=True; User ID=Mainstc; Password=xxxxxxxx”; SqlConnection con = new SqlConnection(connectionString); con.Open(); } } } SQL连接引发了无效的操作exception。 “操作无效。连接已关闭”。 这是我的完整代码。 在另一个程序中,它完美无缺。 这是第二次,这不起作用。 我正在使用VS2005 …也许我的程序已损坏? 堆栈跟踪: 在System.Data.SqlClient.SqlConnection.GetOpenConnection() 在System.Data.SqlClient.SqlConnection.get_ServerVersion()

SQL CLR触发器,如何通过透明代码调用关键代码使程序集受信任?

我已经潜入研究SQL CLR。 不幸的是,我的第一个例子有透明代码调用安全代码的问题 。 重点是我的SQL CLR触发器被视为透明代码。 在触发器中,我使用Quartz来调用Quartz Windows服务: var properties = new NameValueCollection(); properties[“quartz.scheduler.instanceName”] = “ServerScheduler”; properties[“quartz.scheduler.proxy”] = “true”; properties[“quartz.scheduler.proxy.address”] = string.Format(“tcp://{0}:{1}/{2}”, “localhost”, “555”, “QuartzScheduler”); var schedulerFactory = new StdSchedulerFactory(properties); IScheduler scheduler = schedulerFactory.GetScheduler(); 错误: (135,1):SQL72014:.Net SqlClient数据提供程序:消息6522,级别16,状态1,过程AfterMarketSessionInserted,第1行在执行用户定义的例程或聚合“AfterMarketSessionInserted”期间发生.NET Framework错误:System.MethodAccessException : 尝试通过安全透明方法 ‘.Database.Triggers.MarketSessionTriggers.AfterMarketSessionInserted()’ 访问安全关键方法 ‘Quartz.Impl.StdSchedulerFactory..ctor(System.Collections.Specialized.NameValueCollection)’ 失败。 Assembly’Database,Version = 1.0.5275.15169,Culture = neutral,PublicKeyToken = null’部分受信任,这导致CLR使其完全安全透明,而不管程序集本身是否有任何透明度注释。 为了访问安全关键代码,必须完全信任此程序集。 System.MethodAccessException:at Database.Triggers.FinancialMarketSessionTriggers.AfterFinancialMarketSessionInserted() ————– […]

“SubmitChanges()”上的LINQ to SQL“1/2更新失败”

我正在使用LINQ to SQL更新类型X的对象及其子Y,然后提交更改并获取此错误 示例代码 X objX = _context.X.ToList().Where(x => x.DeletedOn == null).First(); objX.DeletedOn = DateTime.Now; EntitySet objYs = objX.Ys; Y objY = objYs[0]; objY.DeletedOn = DateTime.Now; _context.SubmitChanges(); 在SubmitChanges()上,我得到一个例外“1 of 2 Updates failed”,没有其他信息说明为什么会发生这种情况。 有任何想法吗? 另外,exception类型是ChangeConflictException

ADO.Net SQLCommand.ExecuteReader()减慢或挂起

环境: 应用程序(用C#编写.Net 4)最多有10个线程,每个线程在自己的AppDomain中运行。 每个线程都使用ADO.Net DataReader从SQL-Server 2008上获取存储过程的结果。另外一个线程可以使用ADO.Net来执行写操作(Bulk Insert)。 一切都在本地机器上运行。 问题#1: 偶尔(大约每30次运行)线程的执行会急剧减慢。 当DataReader获取存储过程结果时会发生这种情况 – SqlCommand.ExecuteReader()。 通常读操作在10秒内执行。 当它减速时,它会在10-20分钟内执行。 SQLProfiler显示正在查询数据,但速度很慢。 调用减速的问题(请注意,没有例外): at SNIReadSync(SNI_Conn* , SNI_Packet** , Int32 ) at SNINativeMethodWrapper.SNIReadSync(SafeHandle pConn, IntPtr& packet, Int32 timeout) at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket() at System.Data.SqlClient.TdsParserStateObject.ReadBuffer() at System.Data.SqlClient.TdsParserStateObject.ReadByteArray(Byte[] buff, Int32 offset, Int32 len) at System.Data.SqlClient.TdsParserStateObject.ReadString(Int32 length) at System.Data.SqlClient.TdsParser.ReadSqlStringValue(SqlBuffer value, Byte type, […]

如何通过C#确定SQL Server数据库用户的有效权限?

当我说有效权限时,我指的是当您进入SQL Server Management Studio中的数据库属性时列出的权限,单击“权限”,然后单击“有效”选项卡。 到目前为止,我已经能够使用以下代码确定显式权限: using Microsoft.SqlServer.Management.Smo; … DatabasePermissionInfo[] permissions = database.EnumDatabasePermissions(“username”); 但是,我仍然需要获得有效的权限。 在这种情况下,我为用户添加了一个登录名,并通过用户映射为数据库赋予了db_datareader和db_datawriter的角色。 在数据库的权限中,列出的有效权限是CONNECT, DELETE, INSERT, SELECT,和UPDATE ,但仅显式权限列表连接(这是上述代码唯一回退的内容)。 那么还有一种以编程方式检索有效权限的方法吗? 谢谢。

CommandBehavior.SequentialAccess是否有任何性能提升?

我意识到我总是按索引返回的顺序读取我的字段(使用常量)。 所以据我所知,我的代码已经与CommandBehavior.SequentialAccess兼容。 如果我打开它会有任何好处吗? DataReader只是前传,只读是真正的性能增益吗?

如何从C#函数的存储过程返回多个输出参数

我正在使用输出参数从我的数据库中获取值。 这是我的存储过程: ALTER PROCEDURE [dbo].[sp_GetCustomerMainData] — Add the parameters for the stored procedure here @Reference nvarchar(100), @SubscriptionPIN nvarchar(100) OUTPUT, @SignupDate nvarchar(100) OUTPUT, @ProductCount int OUTPUT AS BEGIN — SET NOCOUNT ON added to prevent extra result sets from — interfering with SELECT statements. SET NOCOUNT ON; SET @SubscriptionPIN = ‘N/A’ SET @SignupDate = ‘N/A’ SET […]

entity framework返回错误数据

我有一个Entity Framework 6.1项目,它正在查询SQL Server 2012数据库表并返回不正确的结果。 为了说明发生了什么,我创建了两个应该具有完全相同结果的查询。 表ProjectTable有23列和20500行: var test1 = db.ProjectTable .GroupBy(t => t.ProjectOwner) .Select(g => g.Key) .ToArray(); var test2 = db.ProjectTable .ToArray() .GroupBy(t => t.ProjectOwner) .Select(g => g.Key) .ToArray(); 查询旨在获取表中所有不同项目所有者的列表。 第一个查询在SQL Server上执行繁重的工作,第二个查询将整个表下载到内存中,然后在客户端处理它。 第一个变量test1的长度约为300个。 第二个变量test2的长度为5。 以下是EF生成的原始SQL查询: — test1 SELECT [Distinct1].[ProjectOwner] AS [ProjectOwner] FROM ( SELECT DISTINCT [Extent1].[ProjectOwner] AS [ProjectOwner] FROM [dbo].[ProjectTable] as [Extent1] ) AS […]

表现:.Join vs .Contains – Linq to Entities

我使用Linq实体查询数据库以获取int列表以供进一步处理。 我有两种方法可以获得如下列表: 首先是: List lstBizIds = new List() { 1, 2, 3, 4, 5 }; List lstProjectIds = context.Projects.Where(x => lstBizIds.Contains(x.businessId)).Select(x => x.projectId).ToList(); 第二是: List lstBizIds = new List() { 1, 2, 3, 4, 5 }; List lstProjectIds = context.Projects.Join(lstBizIds, p => p.businessId, u => u, (p, u) => p.projectId).ToList(); 现在我的问题是上面哪一种方法更好的表现? 如果第一个列表即lstBizIds的大小增加,它是否也会影响性能? 如果性能降低,建议我采用其他实施方式。

使用Database.SqlQuery()的entity framework,其中列名是无效的C#成员名称

entity framework6.1 我有一个存储过程,返回以下结果: 所以这些字段名称自然不是我修改为POCO的有效标识符: public class AdHoc_UspGetPassengerCountByAgeReturnDto { public Int32? _0_18 { get; set; } public Int32? _19_30 { get; set; } public Int32? _31_40 { get; set; } public Int32? _41_50 { get; set; } public Int32? _51_60 { get; set; } public Int32? _61_70 { get; set; } public Int32? _71_80 { get; […]