SQL Anywhere 12 ODBC returns 在查询中使用过滤器时零行
SQL Anywhere 12 ODBC returns zero rows when using filters in query
我正在构建一个连接到我的 SQL Anywhere 12 数据库以使用 ODBC 驱动程序获取数据的 .NET c# 应用程序,但我有一个奇怪的问题,每当我在查询中使用过滤器时,我都会得到reader 中没有任何内容,但如果我在 Sybase Center 中执行相同的查询,我会得到预期的结果..
这是我的代码示例
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);
}
reader 循环不会触发,当我查看 sdr.hasrows 时它被设置为 false
Using the same query in Sybase Central
我尝试了其他过滤器,例如 LIKE,然后出现了同样的问题,我不知道为什么会这样。
用于我的应用程序的引用是 System.Data.Odbc
您永远不会关闭连接。 var sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
或类似的东西(我很长时间没有使用 ODBC,所以 CommandBehavior.CloseConnection
可能不是正确答案,但你可以 google 它)。那么while
就会被命中
我终于让它工作了,但没有使用 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();
}
我正在构建一个连接到我的 SQL Anywhere 12 数据库以使用 ODBC 驱动程序获取数据的 .NET c# 应用程序,但我有一个奇怪的问题,每当我在查询中使用过滤器时,我都会得到reader 中没有任何内容,但如果我在 Sybase Center 中执行相同的查询,我会得到预期的结果..
这是我的代码示例
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);
}
reader 循环不会触发,当我查看 sdr.hasrows 时它被设置为 false
Using the same query in Sybase Central
我尝试了其他过滤器,例如 LIKE,然后出现了同样的问题,我不知道为什么会这样。
用于我的应用程序的引用是 System.Data.Odbc
您永远不会关闭连接。 var sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
或类似的东西(我很长时间没有使用 ODBC,所以 CommandBehavior.CloseConnection
可能不是正确答案,但你可以 google 它)。那么while
就会被命中
我终于让它工作了,但没有使用 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();
}