我有一个我相信是用 Clipper 创建的数据库文件,但不能肯定地说(我有 .ntx 文件用于索引,我知道这是 Clipper 使用的)。我正在尝试创建一个 C# 应用程序,它将使用 System.Data.OleDB 命名空间读取此数据库。
在大多数情况下,我可以成功阅读表格的内容,但有一个字段我不能。此字段称为 CTRLNUMS,定义为 CHAR(750)。我已经阅读了通过 Google 搜索找到的各种文章,这些文章建议必须通过与正常分配给字符串变量不同的过程来读取大于 255 个字符的字段。到目前为止,我还没有在我找到的方法上取得成功。
以下是我用来读取表格的示例代码片段,其中包括我用来读取 CTRLNUMS 字段的两个选项。即使字段中存储了 750 个字符,这两个选项都导致返回 238 个字符。
这是我的连接字符串:
提供者=Microsoft.Jet.OLEDB.4.0;数据源=c:\datadir;扩展属性=DBASE IV;
谁能告诉我从 DBF 文件中读取更大字段的秘密?
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = string.Format("SELECT ITEM,CTRLNUMS FROM STUFF WHERE ITEM = '{0}'", stuffId);
using (OleDbDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
stuff.StuffId = dr["ITEM"].ToString();
// OPTION 1
string ctrlNums = dr["CTRLNUMS"].ToString();
// OPTION 2
char[] buffer = new char[750];
int index = 0;
int readSize = 5;
while (index < 750)
{
long charsRead = dr.GetChars(dr.GetOrdinal("CTRLNUMS"), index, buffer, index, readSize);
index += (int)charsRead;
if (charsRead < readSize)
{
break;
}
}
}
}
}
}