Tag: sql server

尝试发布SQL CLR数据库的日期时间类型不匹配

我试图站起来将一些.net函数发布到SQL Server数据库的旧解决方案。 但是,发布到新数据库的尝试在操作日期的函数上失败。 失败的function是: [SqlFunction(TableDefinition=”localtime datetime2″, IsDeterministic=true, IsPrecise=true, DataAccess=DataAccessKind.None, SystemDataAccess=SystemDataAccessKind.None)] public static DateTime ConvertFromUTC(DateTime utctime, string timezoneid) { if (utctime.Kind == DateTimeKind.Unspecified) utctime = DateTime.SpecifyKind( utctime, DateTimeKind.Utc ); utctime = utctime.ToUniversalTime(); return TimeZoneInfo.ConvertTimeBySystemTimeZoneId( utctime, timezoneid ); } 我尝试发布时收到的错误消息是: 创建[dbo]。[ConvertFromUTC] … (268,1):SQL72014:.Net SqlClient数据提供程序: 消息6551,级别16,状态2,过程ConvertFromUTC,第1行 “ConvertFromUTC”的CREATE FUNCTION失败,因为返回值的T-SQL和CLR类型不匹配。 (268,0):SQL72045:脚本执行错误 从.net生成的SQL,试图添加该函数: CREATE FUNCTION [dbo].[ConvertFromUTC] (@utctime DATETIME, @timezoneid NVARCHAR (MAX)) […]

SQLDependency – 无效的SQL

我从这里可以看出最好的,我没有违反任何规则,但是更改事件会一直触发,状态无效。 SELECT COUNT_BIG([PK_Column]) AS RecordCount FROM [dbo].[My_Table] GROUP BY Varchar_50_Column 如果我这样做,一切正常。 SELECT [PK_Column] FROM [dbo].[My_Table] 但是,我不想返回这么多数据,并且SqlDependency似乎要求在每次更改事件触发以设置(或重置)订阅之后执行一次查询。 知道我的第一个查询中有什么缺陷吗?

SqlCommand返回值参数

也许看到这段代码的其他人将能够告诉我为什么returnID始终为0.我试图从插入的记录中检索新的ID。 public int AddToInventory(int PartID, int QtyOnHand, int SpokenFor, int LowOrderQty, int HighOrderQty, decimal LastBuyPrice, decimal AvgBuyPrice) { ConfigDAL config = new ConfigDAL(); string connstr = config.GetConnString(); SqlConnection conn = new SqlConnection(connstr); string query; query = “INSERT INTO Inventory (PartID, QtyOnHand, SpokenFor, LowOrderQty, HighOrderQty, LastBuyPrice, ” + “AvgBuyPrice, CreatedOn, CreatedBy, ModifiedOn, ModifiedBy) ” + “Values […]

SQL Server到Entity Framework的数据类型映射

我需要知道EF的等效SQL Server数据类型。 我发现了两个类似的在线参考,但它们的定义似乎不一致。 如果我使用entity framework,我应该参考哪个参考? 1) ADO.NET中的数据类型映射 http://msdn.microsoft.com/en-us/library/cc716729%28v=vs.110%29.aspx 2) .NET Framework中的SQL Server数据类型 http://msdn.microsoft.com/en-us/library/ms131092.aspx

SQLDependency + Service Broker

我正在使用SqlDependency在某些表中的数据发生更改时获取通知。 private void subscribeBroker() { using (var conn = new SqlConnection(connString)) { conn.Open(); var cmd = new SqlCommand(“SELECT text FROM dbo.Test”); cmd.Connection = conn; var dependency = new SqlDependency(cmd); dependency.OnChange += dependency_OnChange; SqlDependency.Start(connString); cmd.ExecuteNonQuery(); } } void dependency_OnChange(object sender, SqlNotificationEventArgs e) { //Do something… subscribeBroker(); } 它有效,但我有一些问题。 1)我没有找到一种方法来获取哪些行被更改的信息。 我需要读取整个表中的所有数据,看看有什么不同。 有没有办法获得这些信息? (主要ID,或者其他)也许使用与SqlDependency不同的方法? 2)如果“某人”非常快速地改变数据怎么办? 某些更改可能不会被通知? (我关注通知和再次订阅时间之间的时间。 谢谢。

基于服务的数据库与本地数据库之间的混淆

嗨,我是c#的新手,我是一名学生,从过去3个月开始学习c#,在开始我的小项目时,我创建了一个基于服务的数据库,用于将值存储在表中。 在我的应用程序中,我只处理表格。 和查询将在一台机器上工作。 我正在生成一个只能在一台机器上工作的项目。 所以我现在意识到基于服务的数据库和本地数据库之间的差异**基于服务的数据库是一个只能通过服务器访问的数据库。 它使用MDF数据文件,即SQL Server格式。 为了能够连接到SQL Server数据库,SQL Server服务必须正在运行,因为它是处理您的请求并访问数据文件的服务。 本地数据库只是您的应用程序的本地数据库。 它使用SDF数据文件,即SQL Server CE(Compact Edition)格式。 没有必要安装服务器来访问SDF数据库**但是我使用基于服务的数据库形成了整个项目,并使用了所有选择和更新的查询。 我用这个代码 connectionString = @”Data Source=.\ SQLEXPRESS;AttachDbFilename=E:\project\Database1.mdf;Integrated Security=True;User Instance=True”; sqlConnection = new SqlConnection(connectionString); 转移到.sdf文件意味着本地数据库,我只需要替换新的连接字符串? 它是否反映了任何function?

尝试从存储过程读取多列实体结果集时出现问题

我们使用EF5.0和代码优先的方法与MS SQL Server我读了一篇文章http://msdn.microsoft.com/en-us/data/jj691402.aspx 并决定在我们的数据库上尝试相同的方法 但是,假设我的商店程序包含这样的查询 SELECT * from [dbo].[MyEntities] as MyEntity where ID = @ID 和C#中的代码是 var entities = Context.ObjectContext.Translate(reader, “MyEntity”, MergeOption.AppendOnly); 我正在这一点上 System.Data.Entity.dll中出现“System.InvalidOperationException”类型的exception,但未在用户代码中处理 其他信息:找不到EntitySet名称“MyDbContext.MyEntity”。 因此,显然它会添加一些上下文名称作为EntitySet名称的前缀,而不是MyEntity在结果集中查找MyDbContext.MyEntity。 导致此行为的原因以及是否存在任何workaroud(因为在上面引用的示例中,它看起来相当简单且不需要特定的操作,除了调用db.Database.Initialize(force:false);(我在我的代码中执行以及)

我应该如何将.doc文档保存到SQL Server数据库

我使用下面的C#代码将.doc文件保存为SQL Server数据库varbinary(max) 。 我能够保存文件,但当我检索文件并想要在网页上显示内容时,我的代码正在下载文件,我对如何处理它感到非常困惑。 我正在寻找的确切function是naukri.com上传简历并预览它的方式。 我的代码是: byte[] fileContent = new byte[fuResume.PostedFile.ContentLength]; fuResume.PostedFile.InputStream.Read(fileContent, 0, fuResume.PostedFile.ContentLength); //lblAppliedMessage.Text = ByteArrayToString(fileContent); //lblAppliedMessage.Text = BitConverter.ToString(fileContent).Replace(“-“, string.Empty); byte[] btYourDoc; btYourDoc = fileContent; Response.ContentType = “application/ms-word”; Response.AddHeader(“Content-Disposition”, “inline;filename=yourfilename.doc”); Response.OutputStream.Write(btYourDoc, 0, fileContent.Length); Response.BinaryWrite(btYourDoc); Response.End();

通过C#SqlCommand执行合并语句不起作用

我正在尝试使用临时表和MERGE语句通过C#中的SqlCommand对象更新SQL表。 我正在处理的程序旨在首先将一组非常大的记录(超过20k +)导出到Excel电子表格中。 然后,用户能够搜索并替换特定值,并在他们喜欢的记录中更新尽可能多的字段。 我正在尝试的是获取该电子表格,使用它填充DataTable ,然后使用SqlBulkCopy使用DataTable填充临时SQL表。 然后,如果行仍存在于数据库中,则使用MERGE语句更新行。 但是,我遇到的问题是我在ZipCodeTerritory表上的唯一约束一直被触发给我以下错误消息: 无法在对象’dbo.ZipCodeTerritory’中插入具有唯一索引’UQ_ChannelStateEndDateZipCodeISNULL’的重复键行。 重复键值为(9,CA,94351,9999-12-31)。 这使我相信某种方式UPDATE语句没有被执行或者我在某种程度上使用ON关键字错误地加入了表中的表。 唯一约束仅在INSERT语句期间触发,或者在ChannelCode , StateCode , ZipCode或EndDate字段的UPDATE期间触发。 我正在对IndDistrnId字段进行批量更新,并彻底检查了电子表格。 再次,这是我尝试这种技术的第一次尝试,所以任何帮助/建议将不胜感激。 谢谢 C# private static string updateCommand = “UPDATE SET Target.ChannelCode = Source.ChannelCode, Target.DrmTerrDesc = Source.DrmTerrDesc, Target.IndDistrnId = Source.IndDistrnId,” + “Target.StateCode = Source.StateCode, Target.ZipCode = Source.ZipCode, Target.EndDate = Source.EndDate, Target.EffectiveDate = Source.EffectiveDate,” + “Target.LastUpdateId = Source.LastUpdateId, Target.LastUpdateDate = […]

Entity Designer是否支持重复关联数据的多对多关系?

包A有一个桌面Y和一个Monitor Z.包B有一个桌面Y和两个 Monitor Z。 我想在Entity Designer创建的数据库中表示该关系。 StandardPackage和StandardMachine (包括台式机,显示器,笔记本电脑等)之间存在多对多关系。 每个季度,我们都会更新我们的包裹,客户下订单。 他们选择一个包,当下订单时,该包的StandardMachines将他们的数据(类型,品牌,型号等)转储到新创建的Machines 。 问题在于实体设计器为StandardPackageStandardMachine关系创建联结表的方式。 联结表有两列对应于关系每端记录的ID,联结表的主键是这两个ID的组合。 因此,对于第一段中的示例,如果Package A的Id为1,则Package B的Id为2,Desktop Y的Id为1,Monitor Z的Id为2,我需要的是 StandardPackageId | StandardMachineId ——————|—————— 1 | 1 1 | 2 2 | 1 2 | 2 2 | 2 但显然你不能有两个2/2记录。 有没有一种很好的方法告诉实体设计器我打算做什么,以便它将为连接表创建一个自动递增的主键列? 或者我是否必须自己手动创建联结表并自行处理关联? 顺便说一句,如果有人甚至知道如何改写我的问题标题,请这样做。