我正在构建一个.NET c#应用程序,它连接到我的SQL Anywhere 12数据库以使用ODBC驱动程序获取数据,但我有一个奇怪的问题,每当我在查询中使用过滤器时,我在阅读器中什么都没有,但是如果我在Sybase中心执行相同的查询,我得到了预期的结果..
这是我的代码
的一个例子 connection = new OdbcConnection(conStrMonitor);
connection.Open();
var cmd = new OdbcCommand("Select art_artnr, art_ben from monitor.ARTIKEL WHERE art_artnr='VSV203798'", connection);
var sdr = cmd.ExecuteReader();
while (sdr.Read())
{
SearchArticleNr article = new SearchArticleNr();
article.Article = sdr["art_artnr"].ToString();
article.Ben = sdr["art_ben"].ToString();
SarticleList.Add(article);
}
读取器循环不会触发,当我查看sdr.hasrows时,它被设置为false
Using the same query in Sybase Central
我尝试了其他过滤器,例如LIKE,然后出现同样的问题,我不知道为什么会这样。
用于我的应用程序的引用是System.Data.Odbc
答案 0 :(得分:0)
你永远不会关闭连接。 var sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
或类似的东西(我很长时间没有使用过ODBC,因此CommandBehavior.CloseConnection
可能不是正确的答案,但你可以google它)。然后会while
被点击。
答案 1 :(得分:0)
我终于让它工作但没有使用system.data.odbc。我发现了可以安装到项目中的iAnywhere .net参考。我在C:\ Program Files \ SQL Anywhere 12 \ Assembly \ v4.5下找到我的,然后我添加了对我的项目浏览的引用到这个文件夹并导入了iAnywhere.Data.SQLAnywhere.v4.5.dll ..使用这个引用即使在查询中使用过滤器,我现在也可以获得结果。
这是现在的代码:
public List<SearchArticleNr> SearchArticle(string articlenr)
{
List<SearchArticleNr> SarticleList = new List<SearchArticleNr>();
iAnywhere.Data.SQLAnywhere.SAConnection myConnection = null;
iAnywhere.Data.SQLAnywhere.SACommand myCommand = null;
iAnywhere.Data.SQLAnywhere.SADataReader myDataReader = null;
try
{
myConnection = new iAnywhere.Data.SQLAnywhere.SAConnection(conStrMonitor);
myConnection.Open();
myCommand = myConnection.CreateCommand();
myCommand.CommandText = "Select art_artnr, art_ben from monitor.ARTIKEL where art_artnr = ?";
myCommand.Parameters.Add("@art", articlenr);
myDataReader = myCommand.ExecuteReader();
int i = 0;
while (myDataReader.Read())
{
i++;
SearchArticleNr article = new SearchArticleNr();
article.Article = myDataReader["art_artnr"].ToString();
article.Ben = myDataReader["art_ben"].ToString();
SarticleList.Add(article);
}
if (i == 0)
{
SearchArticleNr article = new SearchArticleNr();
article.Article = "NO OBJECTS FOUND";
article.Ben = "NO OBJECTS FOUND";
SarticleList.Add(article);
}
}
catch (Exception exp)
{
myConnection = null;
throw exp;
}
finally
{
myConnection.Close();
myDataReader.Close();
myCommand = null;
}
return SarticleList.ToList();
}