怎么样返回刚插入数据库中的记录。

BigIdiot628 2007-03-02 07:18:12
怎么样返回刚插入的记录?
为什么不能同时执行多个查询语句?

问题一:
Users 表
UserID是Access呀MS SQL数据库中主键,增量,增量为 1

OleDB中
string insertSQL = @"INSERT INTO Users (UserCode,UserName,PWD) VALUES (@UserCode,@UserName,@PWD);";

SQL中
string insertSQL = @"INSERT INTO Users (UserCode,UserName,PWD) VALUES (@UserCode,@UserName,@PWD);
SELECT * FROM Users WHERE UserID = SCOPE_IDENTITY();";

问题二:
我想要SQL中的结果,就是执行完插入命令之后,并返回刚插入的记录,在SQL中可以用 SCOPE_IDENTITY(),
而在OLEDB型数据库中呢?

OLEDB型数据库中,好像一次只能执行一个命令,为什么?
如:
string updateSQL= @"UPDATE Users SET UserCode = @UserCode, UserName = @UserName, Password = @Password
WHERE UserID = @UserID;";
执行没有任何问题
而执行
updateSQL += @"SELECT * FROM Users WHERE UserID = @UserID"
等同于:
string updateSQL= @"UPDATE Users SET UserCode = @UserCode, UserName = @UserName, Password = @Password
WHERE UserID = @UserID ;SELECT * FROM Users WHERE UserID = @UserID"
则提示说,查询语句后面还有字符串。这是为什么,可以用什么方法实现?
...全文
357 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
BigIdiot628 2007-03-03
  • 打赏
  • 举报
回复
问题已解决,方法如下:
private void Update()
{
OleDbDataAdapter da = new OleDbDataAdapter();
da.RowUpdated += new OleDbRowUpdatedEventHandler(da_RowUpdated);
da.Update(dataset,"TableName");
}

private void _da_RowUpdated(object sender, OleDbRowUpdatedEventArgs e)
{
int ID= 0;
OleDbCommand _command = new OleDbCommand("SELECT @@IDENTITY", OleDbConnection);

if (e.StatementType == StatementType.Insert)
{
ID= (int)_command.ExecuteScalar();
e.Row["ID"] = ID;
}
}
BigIdiot628 2007-03-03
  • 打赏
  • 举报
回复
insert into tblneworder2 (item) values ('dd') go SELECT @@IDENTITY AS LastOrderId
我试着用GO
但不支持批处理。
winner2050 2007-03-03
  • 打赏
  • 举报
回复
两条命令顺序执行中间用个 go 就得了,很多人都忘记了。
winner2050 2007-03-03
  • 打赏
  • 举报
回复
insert into tblneworder2 (item) values ('dd') go SELECT @@IDENTITY AS LastOrderId
vrhero 2007-03-03
  • 打赏
  • 举报
回复
Access 只是个轻量级数据库,不支持@@IDENTITY,不支持SCOPE_IDENTITY,不支持批处理,不支持的还多了,都很正常啊,和 OLE DB 有什么关系?

需要多步操作的就逐条执行好了,返回刚插入的记录只能再 SELECT 一次

想执行完更新命令时,再返回当前更新的记录
------------------------
?你刚执行完 UPDATE 怎么会不知道当前更新的是什么数据?一定要得到一条记录的话也只能再 SELECT 一次

Access 嘛,一辆自行车你就别把它当坦克用

还有,没听说过“OLEDB型数据库”,OLE DB 是个模型,实际上和 DBMS 无关的
BigIdiot628 2007-03-03
  • 打赏
  • 举报
回复
string updateSQL = @" UPDATE Users SET UserCode = @UserCode, UserName = @UserName WHERE UserID = @UserID ";

//我现在想执行完更新命令时,再返回当前更新的记录。
//在SQL我是采用这种方法,执行成功,但在OLEDB中,则提示说在查询语句后面找到了字符串。
//我如果想实现像在SQL中的效果,可以采用什么方法?
//updateSQL += "SELECT * FROM Users WHERE UserID = @UserID";
OleDbCommand updateCommand = new OleDbCommand(updateSQL );

updateCommand .Parameters.Add("@UserCode", OleDbType.VarWChar, 10, "UserCode");
updateCommand.Parameters.Add("@UserName", OleDbType.VarWChar, 10, "UserName");
updateCommand.Parameters.Add("@UserID", OleDbType.Integer, 4, "UserID");

BigIdiot628 2007-03-03
  • 打赏
  • 举报
回复
分两条写啰
或是再执行 set ? = conn.execute(select aa = newid())

有两个动作,一是执行插入或更新动作,二是执行查询返回记录,两个语句不能向SQL中一样写在一起吗?
tantaiyizu 2007-03-02
  • 打赏
  • 举报
回复
set ? = conn.execute(select aa = newid())
casablancaliu 2007-03-02
  • 打赏
  • 举报
回复
UP
bzhi268 2007-03-02
  • 打赏
  • 举报
回复
分两条写啰
bzhi268 2007-03-02
  • 打赏
  • 举报
回复
那就执行两次SQL操作
BigIdiot628 2007-03-02
  • 打赏
  • 举报
回复
我是Access数据库。
现在连
string insertSQL = @"INSERT INTO Users (UserCode,UserName,PWD) VALUES (@UserCode,@UserName,@PWD);
SELECT * FROM Users WHERE UserID = @@Identity";

string updateSQL= @"UPDATE Users SET UserCode = @UserCode, UserName = @UserName, Password = @Password WHERE UserID = @UserID ;SELECT * FROM Users WHERE UserID = @UserID"
都执行不了呀?

好像不支持多个语句,可以用其它什么方法实现?
time_is_life 2007-03-02
  • 打赏
  • 举报
回复
@@Identity

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧