在使用数据时,调用sybase存储过程并不总是返回正确的行数

时间:2015-08-05 12:06:06

标签: c# odbc sybase

我有一个简单的应用程序,我使用OdbcConnection在Sybase中调用存储过程。我认为这工作确实不一致,我不知道为什么。

调用存储过程后,我把它放在List>然后将结果转换为xml并将其保存在光盘上。

当运行我的应用程序并调用相同的存储过程时,我每隔一段时间就得到不同的结果。存储过程非常简单,应始终返回1800行。

SP:

SELECT   Column1
        ,Column2
FROM database..Table

呼叫数据库:

public List<Dictionary<String, Object>> GetDataFromDB(string DbConnection, string sp)
{
        var result = new List<Dictionary<String, Object>>();
        using (var con = new OdbcConnection(DbConnection))
        {
            con.Open();
            using (var cmd = con.CreateCommand())
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = sp;
                cmd.CommandTimeout = 15;
                var reader = cmd.ExecuteReader();

                result = GetDataFromQuery(reader);
            }
        }
        return result;
}

private List<Dictionary<String, Object>> GetDataFromQuery(IDataReader reader)
{
        var cols = new String[reader.FieldCount];
        for (var ordinal = 0; ordinal < reader.FieldCount; ordinal++)
            cols[ordinal] = reader.GetName(ordinal);

        var retList = new List<Dictionary<String, Object>>();

        while (reader.Read())
            retList.Add(cols.ToDictionary(t => t, t => reader[t]));

        return retList;
 }

最后我的XML方法:

public XDocument ToXML(string collectionName, IEnumerable<Dictionary<String, Object>> data)
{
        xml = new XDocument(
            new XElement("Table",
                new XAttribute("name", collectionName),
                    from x in data
                        select new XElement("row", x.Select(y => new XAttribute(y.Key, y.Value)))));
}

要保存XML,请使用.Save(path)。

因此,GetDataFromDB不会一直返回它应该返回的所有行。它主要是工作,但也许五分之一是错误的。我试图将阅读器放入数据表然后计算行数,它总是1800.但是某些行丢失了,我的猜测是GetDataFromQuery ...有时XML包含300行,有时1800行。

XML sizes

有人可以帮助我查看问题所在吗?

0 个答案:

没有答案