小编Use*_*ser的帖子

SQL Server中的唯一密钥冲突 - 假设错误2627是否安全?

我需要UNIQUE通过我正在开发的C#应用​​程序以特殊方式捕获对约束的违反.可以安全地假设它Error 2627总是对应于这种违规行为,以便我可以使用

if (ThisSqlException.Number == 2627)
{
    // Handle unique constraint violation.
}
else
{
    // Handle the remaing errors.
}
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 unique-constraint

68
推荐指数
2
解决办法
6万
查看次数

C#中的奇怪增量行为

注意:请注意,下面的代码基本上没有意义,仅用于说明目的.

基于这样一个事实,即在将赋值分配给左侧变量之前必须始终对赋值的右侧进行求值,并且在评估之后始终执行诸如++--之后的递增操作,我不会期望以下代码工作:

string[] newArray1 = new[] {"1", "2", "3", "4"};
string[] newArray2 = new string[4];

int IndTmp = 0;

foreach (string TmpString in newArray1)
{
    newArray2[IndTmp] = newArray1[IndTmp++];
}
Run Code Online (Sandbox Code Playgroud)

相反,我希望newArray1[0]被分配到newArray2[1],newArray1[1]newArray[2]等多达扔的地步System.IndexOutOfBoundsException.相反,令我惊讶的是,抛出异常的版本是

string[] newArray1 = new[] {"1", "2", "3", "4"};
string[] newArray2 = new string[4];

int IndTmp = 0;

foreach (string TmpString in newArray1)
{
    newArray2[IndTmp++] = newArray1[IndTmp];
}
Run Code Online (Sandbox Code Playgroud)

因为,在我的理解中,编译器首先评估RHS,将其分配给LHS,然后才增加这对我来说是一个意外的行为.或者它真的是预期的,我显然错过了什么?

c# post-increment

24
推荐指数
4
解决办法
1118
查看次数

甚至"IsNullOrEmpty"检查也会给出"可能多次枚举IEnumerable"的警告

关于"可能存在多个枚举"的SO有一个问题,但这个问题更具体.

请考虑以下方法,该方法接受IEnumerable<string>输入并对其每个元素执行给定方法:

public static bool SomeMethod(IEnumerable<string> enumerable)
{
    if (enumerable.IsNullOrEmpty())
    {
        // throw exception.
    }
    else
    {
        return (enumerable.All(SomeBooleanMethod));
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,IsNullOrEmpty只是一个运行的扩展方法

return (!ReferenceEquals(enumerable, null) || enumerable.Any());
Run Code Online (Sandbox Code Playgroud)

问题是ReSharper警告我"IEnumerable的可能的多个枚举",我真的不知道这是否真的是一个问题.

我理解警告的含义,但是如果你真的需要在无效或空洞的情况下检查并抛出异常,你在这种情况下真的可以做些什么?

c# resharper ienumerable

20
推荐指数
2
解决办法
8332
查看次数

Transaction和TransactionScope之间的区别

我正在开发一个与SQL Server 2005数据库通信的应用程序来执行一些存储过程.我的客户端要求所有事务都在C#端管理,而不是由SQL Server管理,因此我System.Transactions.TransactionScope在访问数据库时使用.但是,我刚看到System.Transactions.Transaction数据类型,我很困惑......每种类型的主要优点/缺点是什么?我应该使用哪一个?

请注意,我还必须使用Enterprise Library的数据访问应用程序块.

c# transactions sql-server-2005 transactionscope

14
推荐指数
1
解决办法
2万
查看次数

插入SELECT与VALUES

虽然在表格中INSERT INTO SELECT插入单行时没有理由(除了美学),但是使用它和INSERT INTO VALUES?之间有什么区别吗?

sql sql-server-2005 insert

14
推荐指数
3
解决办法
7347
查看次数

IEnumerable&Good Practices(&WCF)

IEnumerable在您不需要实际添加删除内容但仅枚举它们时,使用应用程序范围是一个好习惯吗?

侧问题:你曾经有返回任何问题,IEnumerable<T>从WCF服务?这会给客户端应用程序带来问题吗?毕竟,我认为这将序列化为一个数组.

.net c# ienumerable wcf

14
推荐指数
2
解决办法
6278
查看次数

参数验证最佳实践

想象一下,你有一个应用程序,它是你所有业务逻辑的某种前端.这个前端有很多依赖它的DLL,并且这些DLL中的方法可能在前端单次执行给定方法时重复调用.如果您的应用程序的用户不直接访问这些DLL,您应该......

1)冒险(小)性能命中并验证每种方法中的参数,即使您最终可以验证相同的参数大约5次; 要么

2)风险意外行为并假设,当您验证输入参数时,传入和传出内部代码的所有其他可能参数都是有效的(例如,既不为null也不为空)?

编辑:举个例子,假设你有一个正则表达式RegexA和一个方法

internal bool Matches(string expression)
{
    return RegexA.IsMatch(expression);
}
Run Code Online (Sandbox Code Playgroud)

IsMatch将在null参数上抛出异常,但不在空字符串上抛出异常.如果您事先知道空字符串永远不会与该正则表达式匹配,那么您if (String.IsNullOrEmpty(expression))以前是否应该使用它,即使知道它可能在IsMatch框架方法中被验证为无效?在这种情况下,您显然正在重复验证,但重复它还是冒风险更好?

c# validation parameter-passing

11
推荐指数
3
解决办法
1万
查看次数

捕获System.Exception总是一个坏习惯吗?

请考虑以下代码,它会抛出三个不同的异常(即System.Configuration.ConfigurationErrorsException,System.FormatExceptionSystem.OverflowException):

int SomeInt = Convert.ToInt32(ConfigurationManager.AppSettings["SomeIntValue"]);
Run Code Online (Sandbox Code Playgroud)

异常是不同的,因此在实践中我应该有三个不同的catch块来处理每个特定的异常.但是,在这种特殊情况下,所有异常都以相同的方式处理:将日志写入,例如,EventViewer,并显示一条消息,通知配置错误......在这个特定的原因中,使用它太糟糕了

try
{
    int SomeInt = ConfigurationManager.AppSettings["SomeIntValue"];
}
catch (Exception ThisException)
{
    /* Log and display error message. */
}
Run Code Online (Sandbox Code Playgroud)

或者我应该使用这三个catch块并在每个块中重复代码?

c# exception-handling

11
推荐指数
2
解决办法
5623
查看次数

RAISERROR-如何区分SqlException?

我有3-4个存储过程 - 如果需要我可以修改 - RAISERROR用于通知我的应用程序在数据库端的一些致命错误.其中一些存储过程是从C#端ExecuteNonQuery执行的,而其他存储过程是用ExecuteReader.目前,我将这些命令包装在一个try { ... } catch (SqlException ThisSqlException) { ... }块中,但问题是这个异常将至少抛出两个我必须单独处理的场景:

1)连接本身的错误,或者出现故障或类型不匹配的参数; 和

2)我RAISERROR明确使用时出现的错误.

由于这是一个WCF应用程序,我必须根据异常的性质(无论是否由于RAISERROR命令)返回客户端应用程序的不同反馈.那么,我怎样才能区分这两种情况呢?

c# wcf sql-server-2005 sqlexception raiserror

9
推荐指数
2
解决办法
9089
查看次数

.NET中的局部变量命名约定

我知道命名约定实际上并没有说明任何内容,但我只是很想知道...当你为给定方法声明一个本地变量时,你PascalCasecamelCase它吗?

.net naming-conventions

8
推荐指数
2
解决办法
1515
查看次数