我有一个简单的应用程序,我使用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行。
有人可以帮助我查看问题所在吗?