ado.net中的数据阅读器

时间:2014-04-29 05:43:12

标签: c# ado.net

我有一个数据读取器对象,通过说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);
                }

1 个答案:

答案 0 :(得分:0)

我发现你的问题很有意思,因为如果从另一个进程添加一行,我认为上下文是顺序的,当前的读者会看到它。 如果我已经编写了测试并且没有产生我预期的结果,我可能会来到Stackoverflow并询问:是否可以读取新行,我只是没有做到这一点?或者也许甚至得到一个答案:它有时可能有效但不总是因为xyz ... 然而,你得到了答案三,这是“不要打扰我们,我们昨晚睡不好觉。”

一般而言,DataReader是表格数据集的只读前向读取流。它是流式传输查询的结果,而不是监视表...所以查询结果已经由数据库执行,并在被调用时被提供,但没有被更新。

顺便说一下,你所做的是使用ExecuteReader命令插入一个新行,该命令返回一个新的阅读器......它不会修改你正在循环的外部阅读器。你可以从新的阅读器中读取插入的结果......虽然不清楚你为什么要这么做。

虽然可能超出了测试的范围,但您可能会对Multiple Active Result Sets的概念感兴趣, 允许您在两个之间来回切换结果设置在同一个连接上。