我有一个数据读取器对象,通过说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);
}
答案 0 :(得分:0)
我发现你的问题很有意思,因为如果从另一个进程添加一行,我认为上下文是顺序的,当前的读者会看到它。 如果我已经编写了测试并且没有产生我预期的结果,我可能会来到Stackoverflow并询问:是否可以读取新行,我只是没有做到这一点?或者也许甚至得到一个答案:它有时可能有效但不总是因为xyz ... 然而,你得到了答案三,这是“不要打扰我们,我们昨晚睡不好觉。”
一般而言,DataReader是表格数据集的只读前向读取流。它是流式传输查询的结果,而不是监视表...所以查询结果已经由数据库执行,并在被调用时被提供,但没有被更新。
顺便说一下,你所做的是使用ExecuteReader命令插入一个新行,该命令返回一个新的阅读器......它不会修改你正在循环的外部阅读器。你可以从新的阅读器中读取插入的结果......虽然不清楚你为什么要这么做。
虽然可能超出了测试的范围,但您可能会对Multiple Active Result Sets的概念感兴趣, 允许您在两个之间来回切换结果设置在同一个连接上。