表INSERTED中的SELECT抛出异常"位置0和#34没有行; (索引超出范围异常)

时间:2014-07-30 12:31:34

标签: c# .net triggers sql-server-2012 clr

我在Visual Studio 2010中开发的CLR触发器出现问题,然后部署在SQL Server 2012中。

触发器触发FOR INSERT,UPDATE,所以我的触发器中有这样的结构:

...

//TriggerManager is a class that handle the execution of 
//queries and the trigger context connection
using (TriggerManager t = new TriggerManager())
{
    inserted = @"SELECT * FROM INSERTED";

    DataSet lastdoc = new DataSet();
    using (SqlCommand cmd = new SqlCommand(inserted))
    {
         //The method QueryDataAdapter return a dataset filled with the command cmd.
         lastdoc = t.QueryDataAdapter(cmd);
    }

    //Here i need to store the whole record to use it in
    //further elaborations.
    //And here the execption is raised.
    DataRow insertedRow = lastdoc.Tables[0].Rows[0];
    int docid = (int)insertedRow["field1"];
    string obj = insertedRow["field2"].ToString();


    switch (triggerContext.TriggerAction)
    {
        case TriggerAction.Insert:
            ...
            break;

        case TriggerAction.Update:
            ...
            break;
    }    

所以问题是触发器触发,尝试获取Row [0],但是exeption消息是"位置0和#34;没有Row。但奇怪的是,无论如何都应该执行触发器应该执行的操作(并且DataRow插入行是详细说明所必需的。)

我尝试插入一个像

这样的控件
if (lastdoc.Tables.Count >0 && lastdoc.Tables[0].Rows.Count >0)
{
    ...
}

在尝试获取行之前。但是通过这种控制,触发器不会执行其操作。

似乎触发器在失败后再次触发,但为什么在(理论上)第一次尝试时发现表INSERTED为空?

0 个答案:

没有答案