OleDb异常,字符串中的字符太多

时间:2014-07-02 20:06:16

标签: c# ms-access office-interop

所以我一直在使用oledb创建一个Access表并将数据插入其中,但是当我试图插入的数据在某些字段中变成超过255个字符时,我最近碰到了一堵砖墙。这显然是不可能的。

在使用Excel执行相同类型的操作时,我在过去的程序中遇到了这个问题。我发现的解决方案是使用Microsoft.Office.Interop.Excel。这实际上使我的程序更短更简化,所以我想我也可以使用Access数据库。

唯一的问题是,这个引用几乎没有文档或示例代码,所以我不知道如何完成我的任务。有人可以为我提供一些示例代码,说明如何通常只使用Microsoft.Office.Interop.Access,或者更有帮助的是如何在现有数据库中创建表的示例代码,并用数据填充该表?

更新 这是我的oledb代码无效:

        var cnnStr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};", Db);
        var cnn = new OleDbConnection(cnnStr);
        cnn.Open();

        //make new access table
        using (OleDbCommand command = new OleDbCommand())
        {
            command.Connection = cnn;
            command.CommandText = String.Format("CREATE TABLE [{0}] ([Tag] string, [Text] string)", oldTable + "_combined");
            try
            {
                command.ExecuteNonQuery();
            }
            catch
            {
                //table already exists, so delete it and remake it
                command.CommandText = String.Format("DROP TABLE [{0}]", newTable + "_combined");
                command.ExecuteNonQuery();
                command.CommandText = String.Format("CREATE TABLE [{0}] ([Tag] string, [Text] string)", oldTable + "_combined");
                command.ExecuteNonQuery();
            }
        }

        //fill access table
        using (OleDbCommand command = new OleDbCommand())
        {
            command.Connection = cnn;
            command.CommandText = String.Format("INSERT INTO [{0}] (Tag, [Text]) VALUES (?, ?)", oldTable + "_combined");
            command.Parameters.Add(new OleDbParameter("Tag", ""));
            command.Parameters.Add(new OleDbParameter("Text", ""));
            for (int i = 0; i < (comboText.Length - 1); i++)
            {
                command.Parameters["Tag"].Value = comboTag[i].Replace("\"", "");
                comboText[i] = comboText[i].Replace("\r\n", "");
                command.Parameters["Text"].Value = comboText[i].Replace("\"", "");
                command.ExecuteNonQuery();
            }
        }

        cnn.Close();

当我的代码到达comboText数组中的第19个元素时(此元素有273个字符),代码错误并在command.ExecuteNonQuery()上停止,并显示以下错误消息:&#34; OleDbException未处理:字段为太小,无法接受您尝试添加的数据量。尝试插入或粘贴较少的数据。&#34;

1 个答案:

答案 0 :(得分:1)

  

所以我一直在使用oledb创建一个Access表并将数据插入其中,但是当我试图插入的数据在某些字段中变成超过255个字符时,我最近碰到了一堵砖墙。这显然是不可能的。

无意义。以下C#代码

static void Main(string[] args)
{
    string myConnectionString =
            @"Provider=Microsoft.ACE.OLEDB.12.0;" +
            @"Data Source=C:\Users\Public\Database1.accdb;";
    using (var con = new OleDbConnection(myConnectionString))
    {
        con.Open();
        using (var cmd = new OleDbCommand())
        {
            cmd.Connection = con;
            cmd.CommandText = 
                    "CREATE TABLE MemoTest (" +
                        "Id COUNTER PRIMARY KEY, " +
                        "MemoField MEMO " +
                    ")";
            cmd.ExecuteNonQuery();

            string lorem =
                    "Lorem ipsum dolor sit amet, consectetur adipisicing elit, " +
                    "sed do eiusmod tempor incididunt ut labore et dolore magna " +
                    "aliqua. Ut enim ad minim veniam, quis nostrud exercitation " +
                    "ullamco laboris nisi ut aliquip ex ea commodo consequat. " +
                    "Duis aute irure dolor in reprehenderit in voluptate velit " +
                    "esse cillum dolore eu fugiat nulla pariatur. Excepteur sint " +
                    "occaecat cupidatat non proident, sunt in culpa qui officia " +
                    "deserunt mollit anim id est laborum.";
            cmd.CommandText = "INSERT INTO MemoTest (MemoField) VALUES (?)";
            cmd.Parameters.AddWithValue("?", lorem);
            cmd.ExecuteNonQuery();
            Console.WriteLine(String.Format("Wrote {0} characters to memo field.", lorem.Length));
        }
        con.Close();
    }
}

将以下内容输出到控制台

Wrote 446 characters to memo field.

当我在Access中打开表格时,我看到了:

MemoZoom.png