在一个单独的线程中,我得到了一个关于如何将我的存储过程转换为视图的工作示例,它将客户名称保存到订单映射,其中订单是逗号分隔的订单列表,包括无订单的NULL.因此,对于下表,我需要在视图中显示以下内容:
Name Orders
'John' New Hat, New Book, New Phone
'Marry' NULL
Run Code Online (Sandbox Code Playgroud)
我需要索引视图,但如果视图中的SELECT查询具有APPLY和/或子查询,则无法执行此操作.是否可以将此视图转换为索引视图?
create table Customers (CustomerId int, CustomerName VARCHAR(100))
create table Orders (CustomerId int, OrderName VARCHAR(100))
insert into Customers (CustomerId, CustomerName) select 1, 'John' union all select 2, 'Marry'
insert into Orders (CustomerId, OrderName) select 1, 'New Hat' union all select 1, 'New Book' union all select 1, 'New Phone'
go
create view OrderView as
select c.CustomerName, x.OrderNames
from Customers c
cross apply (select stuff((select ',' + …Run Code Online (Sandbox Code Playgroud) 我有两个非常相似的类,基本上做同样的事情.唯一的区别在于提供给每个类的实例的回调处理程序.回调处理程序是不同的,它们被不同的参数接受.我想将这些类中的大部分代码概括为基类.有关如何智能地概括代理代码的任何想法?我在.NET 2.0上
注意:我阅读了这篇非常有用的关于继承的博客,其代表和关于协方差和与代表相反的文章,但我仍然没有看到如何在这里应用这些知识.
public class A
{
public delegate void AHandler(string param1, string param2);
public void AcceptHandler(string param3, AHandler handler);
public void InvokeHandler(string forParam1, string forParam2);
// the rest is same
}
public class B
{
public delegate void BHandler(int param1);
public void AcceptHandler(int param2, int param3, int param4, BHandler handler);
public void InvokeHandler(int forParam1);
// the rest is same
}
Run Code Online (Sandbox Code Playgroud)
编辑:除了调用具有不同签名的委托方法之外,代码的"其余部分"完全相同.像这样的东西:
public void StartListening()
{
Timer timer = new Timer(CheckForChanges, null, 0, 1000);
}
private …Run Code Online (Sandbox Code Playgroud) 下面的sproc是根据本文中的模板实现的:异常处理和嵌套事务.这个sproc应该处理死锁,它由已经创建事务的另一个sproc调用.内部事务的BEGIN/COMMIT的一些魔法是不匹配的,因为我得到了这个例外:Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0.据我所知,catch被执行,@xstate = -1是真的,整个外部事务被回滚.
任何不匹配发生的想法?
CREATE PROCEDURE [dbo].[mysproc]
AS
BEGIN
SET NOCOUNT ON;
SET DEADLOCK_PRIORITY LOW;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN TRY
DECLARE @trancount int;
SET @trancount = @@TRANCOUNT;
IF (@trancount = 0)
BEGIN TRANSACTION;
ELSE
SAVE TRANSACTION InnerTran;
--
-- do some work that can potentially cause a deadlock
--
END TRY …Run Code Online (Sandbox Code Playgroud) t-sql sql-server nested-transactions sql-server-2008 sqltransaction
我有一个更新变量列的简单查询.此查询稍后是string.Formatted并传递给SqlCommand(c#)(TableId是SomeTable中的一列):
"UPDATE SomeTable set {0}=@Value where TableId=@TableId"
Run Code Online (Sandbox Code Playgroud)
我需要将此查询转换为存储过程.有可能吗?
我在db中有一个datetime列,当我测试它时
DateTime dateTime = DateTime.Now;
state.LastUpdated = dateTime;
Assert.AreEqual(dateTime , state.LastUpdated);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Assert.AreEqual failed. Expected:<3/2/2011 9:52:32 AM>. Actual:<3/2/2011 9:52:00 AM>.
SQL日期时间的粒度是多少,是否可以调整它以获得更多粒度?
如果单例实现了IDisposable,那么处理和重新创建实例的正确方法是什么?一种方法是保持_disposed标志并在Instance属性中检查它,但我不确定这是否是正确的方法.一个简单的例子:
public sealed class Singleton: IDisposable
{
private static Singleton _instance;
private object _lock;
private UnmanagedResource _unmanaged;
private bool _disposed;
private Singleton()
{
_unmanaged = new UnmanagedResource();
_disposed = false;
_lock = new object();
}
public UnmanagedResource Unmanaged { get { return _unmanaged; } }
public static Singleton Instance
{
get
{
if (_instance == null || _disposed)
{
lock (_lock)
{
if (_instance == null || _disposed)
{
_instance = new Singleton();
}
}
}
return _instance;
}
} …Run Code Online (Sandbox Code Playgroud) Uri.CheckHostName("???????.???")返回UriHostNameType.Unknown各处,但在Windows 8上返回UriHostNameType.Dns.任何想法为什么突然出现具有Unicode/Cyrillic字符的主机名在Windows 8中有效?
我需要初始化一堆列表并在初始化期间用很多值填充它们,但我必须使用的csc 2.0编译器不喜欢它.例如:
List<int> ints = new List<int>() { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
将产生以下编译器错误:
错误CS1002 :; 预期
有没有办法初始化一个列表,这将使csc 2.0编译器快乐而不做像这样丑陋的事情:
List<int> ints = new List<int>();
ints.Add(1);
ints.Add(2);
ints.Add(3);
Run Code Online (Sandbox Code Playgroud) 在下面的简化示例中,我需要在这样的方式的抽象集合类PrintFruitsAndEaters(oranges, orangeEaters);或PrintFruitsAndEaters(apples, appleEaters);
成为可能:
abstract class Fruit
abstract class FruitEater
class Apple : Fruit
class AppleEater : FruitEater
class Orange : Fruit
class OrangeEater : FruitEater
class AppleCollection : List<Apple>
class OrangeCollection : List<Orange>
class AppleEaterCollection : List<AppleEater>
class OrangeEaterCollection : List<OrangeEater>
Run Code Online (Sandbox Code Playgroud)
我已经尝试过模板化方法和集合类,但我需要访问特定于Fruit和FruitEater类的方法:
class FruitCollection<T> : List<T>
class FruitEaterCollection<T> : List<T>
void PrintFruitsAndEaters<T, S>(FruitCollection<T> fruits, FruitEaterCollection<S> eaters)
Run Code Online (Sandbox Code Playgroud) 如果应用程序在.net 4.0上运行,那么获取.net 2.0 machine.config文件路径的最佳方法是什么?
一种方法是进行字符串操作和文件系统访问,用v2.0*替换v4.0*,
new ConfigurationFileMap().MachineConfigFilename;然后将其传递给ConfigurationManager.OpenMappedMachineConfiguration(new ConfigurationFileMap(<HERE>)).如果没有更好的可用性,我将采用这种解决方案.
由于USE [dbname]SQL Azure不支持,我试图通过在连接字符串中指定数据库名称然后执行CREATE TABLE...脚本来连接到我的SQL Azure数据库.但是,这会因System.Data.SqlClient.SqlException "在数据库'master'中拒绝CREATE TABLE权限而失败." 我在这里做错了它试图对主人执行这个陈述?
这是一个示例C#代码:
string connectionString = @"Data Source=tcp:MYSERVER.database.windows.net;Initial Catalog=MYDATABASE;Integrated Security=False;User ID=USER@MYSERVER;Password=PWD;Connect Timeout=60;Encrypt=True;TrustServerCertificate=True";using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); ServerConnection serverConnection = new ServerConnection(connection); Server server = new Server(serverConnection); server.ConnectionContext.ExecuteNonQuery("CREATE TABLE New (NewId int)"); }