例如,我正在查看以下schema.ini:
[test.csv]
ColNameHeader=True
CharacterSet=1252
Format=CSVDelimited
Col1=JET1 Bit
Col2=JET2 Byte
Col3=JET3 Short
Col4=JET4 Integer
Col5=JET5 Currency
Col6=JET6 Single
Col7=JET7 Float
Col8=JET8 Date
Col9=JET9 LongChar Attribute 32
Col10=JET10 LongChar Attribute 32
Col11=ODBC1 Char Width 255
Col12=ODBC2 Float
Col13=ODBC3 Integer
Col14=ODBC4 LongChar Attribute 32
Col15=ODBC5 Date
由以下C#生成:
using System;
using System.Data.OleDb;
namespace Sandbox1
{
class Program
{
const string ConnStr =
@"
Provider=Microsoft.ACE.OLEDB.12.0;
Extended Properties=""Text;DATABASE=C:\Test""
";
static void Main(string[] args)
{
using (var conn = new OleDbConnection(ConnStr))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText =
@"
CREATE TABLE [test.csv]
(
JET1 BIT,
JET2 BYTE,
JET3 SHORT,
JET4 LONG,
JET5 CURRENCY,
JET6 SINGLE,
JET7 DOUBLE,
JET8 DATETIME,
JET9 TEXT,
JET10 MEMO,
ODBC1 CHAR,
ODBC2 FLOAT,
ODBC3 INTEGER,
ODBC4 LONGCHAR,
ODBC5 DATE
)
";
cmd.ExecuteNonQuery();
}
//TestPossibleLimit(); // see below (in this SO Q)
}
}
}
我写的是为了探索以下MSDN页面中描述的内容:
Schema.ini File (Text File Driver)
我可以在“文本文件驱动程序编程注意事项”文档中找到最接近似乎的解释:
LONGCHAR:LONGCHAR列宽度的理论极限 固定长度或定界表是65500K。文本ISAM是 更有可能提供高达32K的可靠支持。
我的想法是“属性32”可能表示LONGCHAR数据类型的文本文件驱动程序支持的文本的千字节数,但我找不到任何进一步的信息来确认这一点。
所以我投入了以下方法来测试这个想法,方法是插入比这个限制更短且更长的字符串:
static void TestPossibleLimit()
{
using (var conn = new OleDbConnection(ConnStr))
using (var cmd = conn.CreateCommand())
{
conn.Open();
var possibleLimit = 32 * 1024;
for (var len = possibleLimit - 10;
len <= possibleLimit + 10;
++len)
{
Console.Write("Inserting string of {0} 'x' characters...", len);
cmd.CommandText = string.Format(
"INSERT INTO [test.csv] (ODBC4) VALUES ('{0}')",
new string('x', len));
cmd.ExecuteNonQuery();
Console.WriteLine(" Done!");
}
Console.WriteLine("All done!");
}
}
糟糕(或好的?)新闻是它工作正常 - 显示所有输出,没有抛出异常,CSV反映插入。
所以,因为这个Q的标题可能已经滚出了你的观点:
ACE文本驱动程序数据类型“LongChar Attribute 32”中“属性”的含义是什么?
注意:由于我并不完全清楚ACE和Jet之间的差异,我还尝试使用Jet 4提供程序的上述代码,并获得了相同的schema.ini和插入行为。