什么"属性"在ACE文本文件中表示驱动程序数据类型" LongChar属性32"?

时间:2014-07-03 15:54:41

标签: ms-access jet ms-jet-ace

例如,我正在查看以下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)

我可以在“文本文件驱动程序编程注意事项”文档中找到最接近似乎的解释:

Text File Data Types

  

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和插入行为。

0 个答案:

没有答案