【问题标题】:C#-sql update code. Too many columns in acess databaseC#-sql 更新代码。 access数据库中的列太多
【发布时间】:2018-04-08 00:57:30
【问题描述】:

我有一个 c# 程序可以更新我的访问数据库文件 (.mdb) 中的每个表中的 2 列。我要更新的列是短字符串类型,在更新之前我还将它们的大小更改为 255。我有 15 个文件,我的代码适用于前 7 个 dbs,并在第 8 个文件上崩溃。我分别更新每个代码,它在数据库中间崩溃了

System.Data.OleDb.OleDbException: '记录太大。'

正在崩溃的查询字符串: 更新 CARTE SET SYMBOLE = 'AGLX19.A8E', SYMBOLE2 = 'AWLX19.A8E;@P516.@PQ;@P517.@PQ;@P518.@PQ;@P519.@PQ' 其中代码 = '2862411';

private void UpdateSYMBOLEinDatabase(string tableName, string code)
    {

        if (symboleMdb[0] == "")
            return;

        string queryString = "UPDATE " + tableName +
                            " SET SYMBOLE = '" + symboleMdb[0] + "', SYMBOLE2 = '" + symboleMdb[1] + "' " +
                             "WHERE CODE = '" + code + "';";

        if (symboleMdb[1] == "")
            queryString = queryString.Replace(", SYMBOLE2 = ''", "");

        using (OleDbConnection connectionInput = new OleDbConnection(connectionStringInput))
        using (OleDbCommand command = new OleDbCommand(queryString, connectionInput))
        {
            connectionInput.Open();
            command.ExecuteNonQuery();
            command.Dispose();
        }
    }

我已经仔细检查了 sql 字符串(也在在线检查器中)。 我也在google上搜索过,发现这个错误,可能与我的db中的列太多有关,实际上当我打开db文件时,大约有220列。但是当我以编程方式计算列时,它显示大约有 878 列(在更改列中短字符串类型的长度之前/之后)。对于其他表格,它显示正确的计数。

我发现复制表可能会有所帮助。但实际上我也做不到。

private void CopyDeleteCopyDeleteQuery(string tableName)
    {
        string queryString = "CREATE TABLE " + tableName + "O"+
                            " AS (SELECT * FROM " + tableName +
                            " WHERE CODE='0801733');";
        using (OleDbConnection connectionInput = new OleDbConnection(connectionStringInput))
        using (OleDbCommand command = new OleDbCommand(queryString, connectionInput))
        {
            connectionInput.Open();                
            command.ExecuteNonQuery();
            command.Dispose();
        }
    }

System.Data.OleDb.OleDbException: 'CREATE TABLE 语句中的语法错误。'

查询字符串: CREATE TABLE CARTEO AS (SELECT * FROM CARTE WHERE CODE='0801733');

【问题讨论】:

  • 请尽量将您的问题限制在一个问题上。您复制表的语法不正确,MS Access 使用 SELECT ... INTO 将查询复制到表,而不是 CREATE TABLE AS SELECT

标签: c# sql ms-access oledb


【解决方案1】:

字段的限制为 2kB(不包括备忘录和 OLE。大约 220 列字段,您可能会达到该限制。

您应该规范化表格,或将某些列转换为备注字段。

【讨论】:

    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    相关资源
    最近更新 更多