C#读取Paradox数据库错误

ymy89757 2011-12-20 03:28:25
ODBC 和 OLEDB 2种连接我都试过了,都会出现格式错误,但是SQL语句用DbTour试过的,可以正常查出来数据。
请高手帮我看下是怎么回事~
贴出代码:

private void Handle(DateTime date)
{
//SQLCreator sqlcreator=new SQLCreator();
OLEDBSQLCreator sqlcreator = new OLEDBSQLCreator();
string datestr = date.Month.ToString() + @"/" + date.Day.ToString() + @"/" + date.Year.ToString();
string sqlstr = @"select b." + "\"Date\"" + ",b." + "\"Time\"" + ",b.OrderNo,b.Price,a.CAmount,a.VAmount,a.AAmount,a.MAmount,a.QAmount,a.IAmount,a.DAmount,a.UAmount,a.YAmount,a.OAmount from paybkup.DB a left join ordbkup.DB b on a.OrderNo=b.OrderNo left join itembkup.DB c on a.OrderNo =c.OrderNo where b." + "\"Date\"" + "='" + datestr + "'" + " and c.MenuNo not in ('013001','013002','013003') and b.Price!=0";
StringBuilder sb = new StringBuilder();

using (IDataReader dr =sqlcreator.ExcuteDataReader(sqlstr,configurator.DataBasePath,CommandType.Text))
{
while (dr.Read())
{
sb.Append(configurator.StoreCode+"\r");
sb.Append(configurator.TillID + "\r");
sb.Append(dr[0].ToString() + "\r");
sb.Append(dr[1].ToString() + "\r");
sb.Append("S" + dr[2].ToString().Substring(3) + "\r");
sb.Append(configurator.Plu + "\r");
sb.Append("\r");
sb.Append(dr[4].ToString() + "\r");
sb.Append(dr[5].ToString() + "\r");
sb.Append("0" + "\r");
sb.Append((int.Parse(dr[6].ToString()) + int.Parse(dr[7].ToString()) + int.Parse(dr[8].ToString()) + int.Parse(dr[9].ToString()) + int.Parse(dr[10].ToString()) + int.Parse(dr[11].ToString()) + int.Parse(dr[12].ToString()) + int.Parse(dr[13].ToString())).ToString() + "\r");
sb.Append("0" + "\r");
sb.Append(dr[3].ToString()+System.Environment.NewLine);
}
...全文
239 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjp1234airen4385 2011-12-21
  • 打赏
  • 举报
回复
这么老的东西,你让C#这个新兴语言情何以堪呀?
sdl2005lyx 2011-12-21
  • 打赏
  • 举报
回复
连接字符串有问题,换成:

"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\\DbDir; Extended Properties=Paradox 5.x; Persist Security Info=False"

PARADOX数据库是Boland以前在DELPHI下利用BDE进行操作的桌面数据库,目前已经很少使用,以致ADO都不提供它的引擎了(也害得我吃了不少苦头)。PARADOX数据库本身以独立的表存在的,一个表就可以看成是一个库,或者也可以说是一个文件夹就是一个库,文件夹里的PARADOX数据表就是该库的各个表。PARADOX数据表的扩展名是db,此外还有一些其他的文件类型,作为数据表的辅助,但用ADO对其进行处理时,使用*.DB的文件就已经足够。

ymy89757 2011-12-20
  • 打赏
  • 举报
回复

private bool CreateConnection(string DataBasePath)
{
bool Flags=false;
string connStr = @"Driver={Microsoft Paradox Driver (*.db )};DriverID=538;Fil=Paradox 5.X;DefaultDir="+DataBasePath+";Dbq="+DataBasePath+";CollatingSequence=ASCII;PWD=;";
//string connStr = @"Driver={Microsoft Paradox Driver (*.db )};DriverID=538;Fil=Paradox 5.X;DefaultDir="+DataBasePath+";Dbq="+DataBasePath+";CollatingSequence=ASCII;PWD=;";
//string connStr = @"Provider=MSDASQL;Persist Security Info=False;Mode=Read;Extended Properties='DSN=Paradox;DBQ=C:\myDb;DefaultDir="+DataBasePath+";DriverId=538;FIL=Paradox 7.X;MaxBufferSize=2048;PageTimeout=600;';Initial Catalog="+DataBasePath+";";
conn.ConnectionString = connStr;
try
{
conn.Open();
Flags = true;
}
catch (Exception ex)
{
throw ex;
}
return Flags;
}
/


这是现在用的连接方式,是不是驱动不支持该SQL查询啊。
ymy89757 2011-12-20
  • 打赏
  • 举报
回复
Select * 的情况是正常的,可以正常执行,但是我的数据库比较大,执行大概需要20多分钟,不大实际了。
加入Conditions之后就报错了,这个SQL查询字符我直接拷贝到 DBTour中就可以直接执行的。
csdn_aspnet 2011-12-20
  • 打赏
  • 举报
回复
参考代码string ConnectionString = @" Driver={Microsoft Paradox Driver (*.db )};DriverID=538;Fil=Paradox 5.X;DefaultDir=C:Paradox;Dbq=C:Paradox;CollatingSequence=ASCII;PWD=; " using (System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection(ConnectionString))
{
conn.Open();
using (System.Data.Odbc.OdbcCommand command = conn.CreateCommand())
{
command.CommandText = " update test set aa=14 " ;
command.ExecuteNonQuery();

command.CommandText = " select * from test " ;
Console.WriteLine(command.ExecuteScalar());
}

ymy89757 2011-12-20
  • 打赏
  • 举报
回复
其他的代码都是正确的, 我用Select * 试过的,正常通过~

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧