ado.net中的数据读取器
本文关键字:读取 数据 net ado | 更新日期: 2023-09-27 18:00:44
我有一个数据读取器对象,它读取4行,我将在这些行中循环。在读取第三行时,我在同一个表中插入一行,我的数据读取器是否能够读取新插入的行。如果不是如何实现这个功能
这是我试过的代码。
AseCommand sessionCmd = null;
//AseCommand selectCmd = null;
AseCommand insertCmd = null;
AseDataReader reader = null;
string retCode = "Nothing returned from the Server";
string insertStatement;
AseConnection conn = null;
conn = new AseConnection("Data Source='" + host + "';Port='" + port + "';UID='" + user + "';PWD='" + password + "';Database=" + db + ";");
conn.Open();
sessionCmd = new AseCommand("select * from dbo.DummyTable", conn);
try
{
reader = sessionCmd.ExecuteReader();
int count = 0;
while (reader.Read())
{
Console.WriteLine(reader.GetString(0));
count++;
if (count == 3)
{
//insert into table
insertCmd = new AseCommand("insert into DummyTable values (5)", conn);
insertCmd.ExecuteReader();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
我觉得你的问题很有趣,因为我认为如果从另一个进程添加一行,当前读者会看到它吗。如果我写了你的测试,但它没有产生我预期的结果,我可能会来到Stackoverflow问:是否有可能读取新行,而我只是做得不对,甚至可能得到这样的答案:它有时可能有效,但并不总是有效,因为xyz。。。然而,你得到的答案是"别打扰我们,我们昨晚睡得不好。"
一般来说,DataReader是一种只读的前向读取表格数据集流。它正在流式传输查询结果,而不是监视表。。。因此,查询结果已经由数据库执行,并且在调用时得到服务,但没有更新。
顺便说一句,您所做的是使用ExecuteReader命令插入新行,该命令返回一个新的读取器。。。它不会修改您循环通过的外部读取器。你可以从新的阅读器上阅读插入的结果。。。尽管还不太清楚你为什么要这样做。
虽然可能超出了测试的范围,但您可能对多个活动结果集的概念感兴趣,允许您在同一连接上的两个结果集之间来回切换。