Я работал над программой для чтения файла dbf, работы с данными и сохранения его обратно в dbf. Проблема, с которой я столкнулся, связана именно с частью письма.
private const string constring = "Driver={Microsoft dBASE Driver (*.dbf)};"
+ "SourceType=DBF;"
+ "DriverID=277;"
+ "Data Source=¿;"
+ "Extended Properties=dBASE IV;";
private const string qrystring = "SELECT * FROM [¿]";
public static DataTable loadDBF(string location)
{
string filename = ConvertLongPathToShort(Path.GetFileName(location));
DataTable table = new DataTable();
using(OdbcConnection conn = new OdbcConnection(RTN(constring, filename)))
{
conn.Open();
table.Load(new OdbcCommand(RTN(qrystring, filename), conn).ExecuteReader());
conn.Close();
}
return table;
}
private static string RTN(string stmt, string tablename)
{ return stmt.Replace("¿", tablename); }
[DllImport("Kernel32", CharSet = CharSet.Auto)]
static extern Int32 GetShortPathName(
String path, // input string
StringBuilder shortPath, // output string
Int32 shortPathLength); // StringBuilder.Capacity
public static string ConvertLongPathToShort(string longPathName)
{
StringBuilder shortNameBuffer;
int size;
shortNameBuffer = new StringBuilder();
size = GetShortPathName(longPathName, shortNameBuffer, shortNameBuffer.Capacity);
if (size >= shortNameBuffer.Capacity)
{
shortNameBuffer.Capacity = size + 1;
GetShortPathName(longPathName, shortNameBuffer, shortNameBuffer.Capacity);
}
return shortNameBuffer.ToString();
}
Это то, с чем я работаю. Я попробовал несколько методов, чтобы написать новый файл, но ни один из них не был продуктивным. Честно говоря, в то время как обычно я был бы сторонником формы и функции, я просто хочу, чтобы эта чертова штука сработала, это приложение должно делать одну очень специфическую вещь, оно не будет имитировать погоду.
- = # Edit # = -
С тех пор я прекратил приложение из-за нехватки времени, но перед тем, как отменить его, я понял, что в конкретном формате dbf, с которым я работал, не было информации первичного ключа. Это, конечно, означало, что мне пришлось по существу считывать данные в DataTable, связываться с ними, а затем стирать все записи в dbf и вставлять все с нуля.
Винт это для жаворонка.