C# SqlServerCE:TableAdapter+@@identity

C# SqlServerCE:TableAdapter+@@identity,c#,sql,c#-4.0,C#,Sql,C# 4.0,如何获取插入查询的id?简单: insert into Ex(sth) values("value"); select @@identity 不起作用。当我尝试执行Calar或任何其他命令时,我得到异常:{分析查询时出错。[令牌行号=3,令牌行偏移量=95,令牌错误=select]} 我提醒你这是CE版。我正在使用MSVS2010 感谢您的帮助。该.Net SQL CE客户端不支持多条语句。 您需要使用两个单独的SQLCECommand。TableAdapter.NET 4仅在命令执行之前关闭

如何获取插入查询的id?简单:

insert into Ex(sth) values("value");
select @@identity
不起作用。当我尝试执行Calar或任何其他命令时,我得到异常:{分析查询时出错。[令牌行号=3,令牌行偏移量=95,令牌错误=select]}

我提醒你这是CE版。我正在使用MSVS2010


感谢您的帮助。

该.Net SQL CE客户端不支持多条语句。
您需要使用两个单独的SQLCECommand。

TableAdapter.NET 4仅在命令执行之前关闭连接时,才会在命令执行之后关闭连接。因此,请使用类似这样的方法:

try
            {
                if (_tasksAdapter.Connection.State != ConnectionState.Open)
                    _tasksAdapter.Connection.Open();

                _tasksAdapter.InsertNew(_partitionedFile.Uid, _partitionedFile.Checksum);
                _dbId = (int)_tasksAdapter.GetIdentity().Value;
            }
            finally
            {                    
                if (_tasksAdapter.Connection.State != ConnectionState.Closed)
                    _tasksAdapter.Connection.Close();
            }

其中InsertNew方法执行INSERT命令,GetIdentity方法执行SELECT@@IDENTITY。

。。。但是,当您从Select获取null时,不能在单独的查询中执行此操作。这个问题还有其他解决办法吗?我的意思是-获取先前插入行的id。我不确定。您可以改为使用客户端的GUID。好的,找到了,但smth仍然存在:/TableAdapter自动在查询后关闭其连接,因此查询@@identity没有任何意义-查询必须在同一个连接上进行-这就是我所做的。不幸的是,您失去了可视化编辑器的好处,而您必须自己编写附加函数;