我目前正在开发一个使用LINQ to SQL进行数据库访问的项目.我有必要手动更新DBML文件,方法是右键单击它并使用XML编辑器打开它,因为我不想重新生成文件并丢失对关联成员名称所做的所有更改.
有人可以向我解释DBML文件的Association元素中存储属性的用途吗?我搜索过这个论坛和谷歌无济于事.每个关联元素中都不存在存储属性.我在我的DBML中包含了XML,它包含并排除了以下存储属性:
<Association Name="Customer_WorkOrder" Member="Customer" ThisKey="CustomerId" OtherKey="Id" Type="Customer" IsForeignKey="true" />
<Association Name="Sycode_WorkOrder" Member="WorkOrderOrderStatus" Storage="_Sycode" ThisKey="OrderStatus" OtherKey="recno" Type="Sycode" IsForeignKey="true" />
Run Code Online (Sandbox Code Playgroud) 我已根据以下帖子的第一个答案提供的信息实施了审计跟踪框架:
SQL Server历史记录表 - 通过SP或Trigger填充?
最终,我实现的框架使用每个表三个触发器,根据表的更改插入审计信息.
我的插入和删除审计触发器非常简单.但是,更新触发器要复杂得多,因为触发器必须检查以确定每个列是否处于审计控制之下,然后根据Inserted和Deleted列中的列值是否相等来执行插入操作.我不想写不必要的审计记录.最后,我想知道是否有办法编写一个存储过程,通过允许我动态执行下面的insert语句来减少触发器中的代码量.基本上,我设想触发器使用处于审计控制下的每个列名触发sproc,然后存储过程将使用列名来执行下面的代码片段.目前,对于审计控制下的每一列,我都有以下代码,遗憾的是,这会产生大量冗余代码.
建议更改后修改触发器
CREATE TRIGGER [dbo].[Audit_Customers_Update] ON [dbo].[Customers]
FOR UPDATE AS
select FirstName,LastName into #deleted from deleted;
declare /*const*/ @TABLE_NAME sysname = '[table name]';
declare f cursor
local
forward_only
read_only
for
select c.name, quotename(c.name, '[')
from
sys.columns c
inner join sys.types t on c.system_type_id = t.system_type_id
where
c.object_id = object_id(@TABLE_NAME)
and c.is_computed = 0
and c.is_identity = 0
and t.name not in ('text', 'image', 'timestamp', 'xml')
and (substring(COLUMNS_UPDATED(), ((c.column_id - 1) / 8) + 1, …Run Code Online (Sandbox Code Playgroud) 我正在开发一个相当简单的分布式应用程序.服务器部分公开了一个名为FuelCommands的远程对象,允许客户端与燃油泵进行交互(即授权,取消授权,重置,获取状态等等).客户端是一个Windows窗体应用程序,它具有用于与泵交互并查看其状态的GUI.无论何时客户端需要与泵交互,它都必须通过服务器上暴露的远程对象来完成.问题是在某些Windows 8计算机上通信并不总是成功.我的开发机器总能工作,但是在运行Windows 8的其他工作站上,我遇到套接字错误.具体来说,错误信息如下:
************** Exception Text **************
System.Net.Sockets.SocketException: An operation was attempted on something that is not a socket
Server stack trace:
at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Runtime.Remoting.Channels.SocketStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at System.Runtime.Remoting.Channels.ChunkedMemoryStream.WriteTo(Stream stream)
at System.Runtime.Remoting.Channels.Tcp.TcpClientSocketHandler.GetRequestStream(IMessage msg, Int32 contentLength, ITransportHeaders headers)
at System.Runtime.Remoting.Channels.Tcp.TcpClientSocketHandler.SendRequest(IMessage msg, ITransportHeaders headers, Stream contentStream)
at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.SendRequestWithRetry(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream)
at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)
Run Code Online (Sandbox Code Playgroud)
下面是一些相关的代码片段,它们应该演示如何公开和访问远程对象.有人可以看看,告诉我为什么我可能会得到这个例外吗?
服务器应用
// Expose …Run Code Online (Sandbox Code Playgroud) 今天早上我通过设计器从 Linq to SQL DBML 文件中删除了一个表。进行多项更改后,我尝试将表添加回 DBML 设计器界面,但 Visual Studio 没有执行任何操作。当我尝试从服务器资源管理器中的列表中拖动表时,我没有看到指示它正在尝试拖放操作的箭头。我尝试将其他几个表从服务器资源管理器拖到设计器中,但无济于事。我没有收到错误。
我还尝试更新驻留在同一解决方案中的另一个项目中的数据集,并且得到相同的结果。Visual Studio 2010 不允许我将表从服务器资源管理器拖动到 XSD 或 DBML 文件的设计器界面。
到目前为止我已经尝试过以下操作
1) Close all windows in VS
2) Restart VS
3) Restart PC
4) Revert DBML to earlier versions
Run Code Online (Sandbox Code Playgroud)
有什么建议么?这在周五工作得很好,我没有改变框架中的任何重要内容。
也尝试了以下两件事:删除用户选项文件并重新启动 VS 并使用 DataSet 创建新项目并尝试从服务器资源管理器中拖动表。两者都失败了。
我有一个ObjectListView基本上是标准.NET的包装器ListView.我的问题是我无法找出正确的方法调用序列,以向控件添加新对象,滚动控件以确保对象可见,并选择对象.下面,是我的代码实现这一点.一切正常,但由于某种原因,在我点击或重新调整其中一列之前,所选项目/对象的背景颜色不会显示.我不确定控件是否没有被聚焦或是什么.
// objectListViewItems is of type BrightIdeasSoftware.ObjectListViewItems
objectListViewItems.AddObject(e.InsertedItem);
objectListViewItems.Refresh();
objectListViewItems.Focus();
objectListViewItems.EnsureModelVisible(e.InsertedItem);
objectListViewItems.SelectedObject = e.InsertedItem;
objectListViewItems.Focus();
Run Code Online (Sandbox Code Playgroud)
下面的代码更新了ObjectListView中的一个项目,并且运行正常.不确定我上面做错了什么......
objectListViewItems.RefreshObject(itemToEdit);
objectListViewItems.Focus();
objectListViewItems.SelectObject(itemToEdit);
Run Code Online (Sandbox Code Playgroud) 最近我继承了一个新的ASP网络应用程序,它只允许客户在线支付他们的未付发票.该应用程序设计不佳,没有付款历史记录表.整个付款表由Web服务删除,该服务将付款记录传输到记录的会计系统.
我刚刚在Payments表上创建了一个简单的触发器,它只是将Payments表中的数据复制到Payment_Log表中.最初,触发器只是插入了select*on来复制数据.但是,我刚刚修改了触发器,将付款日期插入到Payment_Log表中,因为我们的一个客户遇到了一些我需要调试的问题.新触发器如下.我的问题是我注意到,使用这个新版本的触发器,行被插入到表的中间(即不在末尾).有人可以解释为什么会这样吗?
ALTER trigger [dbo].[PaymentHistory] on [dbo].[Payments]
for insert as
Declare @InvoiceNo nvarchar(255),
@CustomerName nvarchar(255),
@PaymentAmount float,
@PaymentRefNumber nvarchar(255),
@BulkPaid bit,
@PaymentType nvarchar(255),
@PaymentDate datetime
Select @InvoiceNo = InvoiceNo,
@CustomerName = CustomerName,
@PaymentAmount = PaymentAmount,
@PaymentRefNumber = PaymentRefNumber,
@BulkPaid = BulkPaid,
@PaymentType = PaymentType
from inserted
Set @PaymentDate = GETDATE()
Insert into Payment_Log
values (@InvoiceNo, @CustomerName, @PaymentAmount, @PaymentRefNumber, @BulkPaid, @PaymentType, @PaymentDate)
Run Code Online (Sandbox Code Playgroud)
下面是SQL Server Management Studio的屏幕截图,显示了插入到表数据中间的行.在此先感谢帮助人员.

我正在努力弄清楚如何在打印时让 MSChart 填满整个页面。有人可以告诉我为什么下面的代码不起作用和/或建议另一种方法。我为我的无知表示歉意,但到目前为止我所做的所有打印都是通过 Crystal 和其他报告框架完成的,所以我通常不必直接使用 PrintDialog 和 PrintPreviewDialog。提前致谢。
// Printing Code
Size pageSize = new Size(this.Chart.Printing.PrintDocument.DefaultPageSettings.PaperSize.Width, this.Chart.Printing.PrintDocument.DefaultPageSettings.PaperSize.Height);
this.Chart.Size = pageSize;
// This properly previews my chart but, it does not fill up the page
this.Chart.Printing.PrintPreview();
Run Code Online (Sandbox Code Playgroud)