当前位置:  开发笔记 > 编程语言 > 正文

从c#执行dbf中的查询

如何解决《从c#执行dbf中的查询》经验,为你挑选了1个好方法。

我在C#中做一个程序,我试图在DBF文件中执行一个查询,我认为没问题,但DataReader的HasRows属性值为false.我认为问题在于日期.这是我的代码:

 string Con = @"Provider=VFPOLEDB.1;Data Source=\\Server\ges_01";
 OleDbConnection ConnectionHandler = new OleDbConnection(Con);
ConnectionHandler.Open();

 string SQL = "SELECT codalb FROM BALBARA WHERE FECALB BETWEEN CTOD('2015/12/07') AND CTOD('2015/12/13') AND CODCLI LIKE '%9' ORDER BY CODALB"
 OleDbCommand Query = new OleDbCommand(SQL, ConnectionHandler);
 OleDbDataReader datareader = Query.ExecuteReader();
while(datareader.Read())
{}

我知道其余的都可以,因为如果把string SQL="select codalb from balbara";工作正常.

任何人都可以说我做错了什么



1> kayess..:

这里的问题是OLE DB提供程序CTOD()不支持该功能.

更改您的查询以使用DTOS()哪个:

从指定的Date或DateTime表达式返回yyyymmdd格式的字符串日期.

因此,总结您的查询可能会变为:

string SQL = String.Format(
    @"SELECT 
        codalb 
    FROM
        balbara 
    WHERE 
        DTOS(fecalb) BETWEEN '{0}' AND '{1}'
        AND codcli LIKE '%9' 
    ORDER BY 
        codalb", 
        dateTimeVariable1.ToString("yyyyMMdd"),
        dateTimeVariable2.ToString("yyyyMMdd"));

注1:检查缩进以帮助您编写可读代码,我建议将所有列/表名称写成小写,这样您就可以轻松区分什么是"数据"和什么是SQL.

注意2:您可以在此处找到有关此DateTime类型的正式格式字符串示例.


编辑:作为@AlanB评论中的一个建议,您应该始终努力使用参数化查询而不是字符串来防止SQL注入攻击.

关于OLEDB参数的评论:

当CommandType设置为Text时,OLE DB .NET提供程序不支持将参数传递给SQL语句或OleDbCommand调用的存储过程的命名参数.在这种情况下,必须使用问号(?)占位符.

关于参数的顺序:

因此,OleDbParameter对象添加到OleDbParameterCollection的顺序必须直接对应于命令文本中参数的问号占位符的位置.

因此,给出查询的所有这些信息都可以看作这样的示例:

OleDbCommand Query = new OleDbCommand();
Query.Connection = ConnectionHandler;
Query.CommandText = 
    @"SELECT 
        codalb 
    FROM
        balbara 
    WHERE 
        DTOS(fecalb) BETWEEN ? AND ?
        AND codcli LIKE '%9' 
    ORDER BY 
        codalb";

Query.Parameters.Add(dateTimeVariable1.ToString("yyyyMMdd"));
Query.Parameters.Add(dateTimeVariable2.ToString("yyyyMMdd"));
OleDbDataReader datareader = Query.ExecuteReader();

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有