小编kbi*_*ang的帖子

捕获唯一键冲突的通用方法

我使用System.Data.Common.DbCommand将新行插入数据库.关键是,这一行已经存在.

try
{
    [...]
    DbCommand insertCommand = [...]
    insertCommand.ExecuteScalar();
    [...]
}
catch (System.Exception exception)
{
   [...]
   throw;
}
Run Code Online (Sandbox Code Playgroud)

如果我将显式捕获System.Data.SqlClient.SqlException,我可以像下面一样评估ErrorNumber.

try
{
  //insertion code
}
catch(SqlException ex)
{
  if(ex.Number == 2627)
  {
     //Violation of primary key. Handle Exception
  }
}
Run Code Online (Sandbox Code Playgroud)

SqlException上下文中的ErrorNumber 2627意味着违反唯一键.请参阅https://msdn.microsoft.com/en-us/library/ms151757%28v=sql.110%29.aspx

到现在为止还挺好.因为我正在使用DbCommand,因此使用不同类型的关系数据库管理系统,我正在寻找一种更通用的方式来捕获这种违反唯一键约束的行为.

感谢帮助.

c# exception sqlexception dbcommand

7
推荐指数
1
解决办法
1165
查看次数

VBScript:如何调用在Dispatch Map中用元音定义的函数

我有以下VBScript脚本,它创建一个Microsoft COM对象.

set foo = CreateObject("Bar.ProgId")
foo.Einfügen()
Run Code Online (Sandbox Code Playgroud)

该COM对象的实现位于动态链接库中Foo.dll,该库使用Microsoft Foundation Framework(MFC),尤其是Dispatch Maps的机制.

Dispatch Maps显示如下

BEGIN_DISPATCH_MAP(Foo, CCmdTarget)
[...]
DISP_FUNCTION(Foo, "Einfügen", Insert, VT_I2, VTS_NONE)
[...]
END_DISPATCH_MAP()
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.当我在VBA环境中创建这样的COM对象时,例如在Excel应用程序中,调用foo.Einfügen成功.除了在VBScript-Script中.

我认识到OLE自动化应用于VBA以及VBScript.但是当我运行VBScript-Script时,我收到了错误

错误:未知字符; 代码8000A0408;
来源:在Microsoft VBScript中编译失败

首先我认为VBScript-Script中的编码因为字符ü而错误,但我确认它是ANSI编码的.我还验证了我系统上的Windows代码页是Windows-1252西方拉丁字符集.

如果我在Dispatch Map中更改Einfügen为EinfuegenI断言VBScript-Script正在运行.

所以我的问题是,为什么foo.EinfügenVBScript 中的调用行为与VBA不同?这种行为的原因是什么?

对我来说,解决方法是我DISP_FUNCTION在调度图中附加第二个条目,该条目将分派Einfuegen给该函数Insert.在VBScript-Script中,我foo.Einfuegen仍然在VBA中调用foo.Einfügen.

vbscript mfc ole-automation

4
推荐指数
1
解决办法
203
查看次数

标签 统计

c# ×1

dbcommand ×1

exception ×1

mfc ×1

ole-automation ×1

sqlexception ×1

vbscript ×1