我正在尝试在.Net 3.5应用程序中读取Paradox 7.x .db文件,但我没有成功。
首先,当我注册odbc时,作为用户或系统dsn,Microsoft Paradox ODBC驱动程序仅显示高达5.x的版本,因此看起来它不支持Paradox版本7.x
在connectionsstrings.com我找到了应该与Paradox 7.x一起使用的连接字符串:
Provider=MSDASQL;Persist Security Info=False;Mode=Read;
Extended Properties='DSN=Paradox;DBQ=C:\mydbfolder;
DefaultDir=C:\mydbfolder;DriverId=538;FIL=Paradox 7.X;MaxBufferSize=2048;
PageTimeout=600;';Initial Catalog=C:\mydbfolder
但是当我尝试使用数据适配器测试连接时,我得到以下异常:
“错误[IM002] [Microsoft] [ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序”
我已将ODBC指定为用户DSN和系统DSN,但仍然收到相同的错误。
有关我该怎么做的任何线索?
谢谢,
佩德罗
答案 0 :(得分:2)
http://www.progware.org/Blog/post/Connecting-to-a-PARADOX-DB-with-C-%28Vista-XP%29.aspx
和
ConnectionString.Append(@"Provider=Microsoft.Jet.OLEDB.4.0;");
ConnectionString.Append(@"Extended Properties=Paradox 7.x;");
ConnectionString.Append(@"Data Source=Z:\Dane;");
//ConnectionString.Append(@"Mode=ReadWrite;");
ConnectionString.Append(@"Mode=1;");
答案 1 :(得分:0)
好奇,为什么不使用OLEDB提供程序然后使用System.Data.OleDb namepsace中的类?
答案 2 :(得分:0)
这是我过去工作过的一段代码,它将起作用。它基于该线程其他地方PrzemysławStaniszewski的帖子中现在无效的链接中的代码。
它使用OleDbConnection和OleDbDataAdapter打开一个悖论数据库文件,并将该文件的内容加载到DataTable变量中。
此代码对我有用,并且用于匆忙的oneshot作业,并且缺少错误处理。它可能对您有用。
/// <summary>
/// ConnectToTable
/// </summary>
/// <param name="pFullPath">Full path to .DB file</param>
/// <param name="pTableName">Name of table to load</param>
public static void ConnectToTable(string pFullPath, string pTableName)
{
OleDbConnection _ParadoxConnection = new OleDbConnection();
StringBuilder ConnectionString = new StringBuilder("");
ConnectionString.Append(@"Provider=Microsoft.Jet.OLEDB.4.0;");
ConnectionString.Append(@"Extended Properties=Paradox 7.x;");
ConnectionString.Append(string.Format(@"Data Source={0}", pFullPath));
_ParadoxConnection.ConnectionString = ConnectionString.ToString();
_ParadoxConnection.Open();
using (OleDbDataAdapter da = new OleDbDataAdapter(
string.Format("SELECT * FROM {0};", pTableName)
, _ParadoxConnection))
{
DataTable tab = new DataTable
{
TableName = pTableName
};
da.Fill(tab);
//tab now contains a data
//Get the column name
foreach(DataColumn col in tab.Columns)
{
Console.WriteLine(col.ColumnName);
}
//do the rows
foreach (DataRow row in tab.Rows)
{
foreach(var item in row.ItemArray)
{
//write each row value
}
}
}
}