Database schema has changed

I keep getting this error database schema has changed near "1": syntax error.

I do not change my scheme in the code. This is the code in which I am making the circuit. want to try every answer to post it. This code is used to transfer the database to another database program. Therefore, it must be compatible with more than one database program.

public DataTable GetSchemaTable(string schema, string nameTable)
    {
        switch (m_dbType)
        {
            case dbTypeEnum.Sqlite:
                //Make the schema of the source table
                MakeConnectionString();
                string fullTableName = schema.Length > 0
                    ? string.Format("[{0}].[{1}]", schema, nameTable)
                    : string.Format("[{0}]", nameTable);
                if (!string.IsNullOrEmpty(fullTableName))
                {
                    string sql = string.Format("SELECT * FROM {0} LIMIT 1", fullTableName);
                    DataTable dtSchemaSource;
                    try
                    {
                        using (IDataReader rdr = ReadOnlyForwardOnly(sql))
                        {
                            dtSchemaSource = rdr.GetSchemaTable();
                        }
                    }
                    finally
                    {
                        CloseConnection();
                    }
                    if (dtSchemaSource == null)
                    {
                        throw new RadGeneralException("rdr.GetSchemaTable() returns null with sql = " + sql);
                    }

                    return dtSchemaSource;
                }
                break;

            default:
                //Make the schema of the source table
                MakeConnectionString();
                string fullTableName = schema.Length > 0
                    ? string.Format("[{0}].[{1}]", schema, nameTable)
                    : string.Format("[{0}]", nameTable);
                string sql = string.Format("SELECT TOP 1 * FROM {0}", fullTableName);
                DataTable dtSchemaSource;
                try
                {
                    using (IDataReader rdr = ReadOnlyForwardOnly(sql))
                    {
                        dtSchemaSource = rdr.GetSchemaTable();
                    }
                }
                finally
                {
                    CloseConnection();
                }
                if (dtSchemaSource == null)
                {
                    throw new RadGeneralException("rdr.GetSchemaTable() returns null with sql = " + sql);
                }
                return dtSchemaSource;

        }
    }

This is the part where the sqlite schema has changed.

StringBuilder sbColList = new StringBuilder();
        nCol = 0;
        identityColInBothTables = false;
        //Make the schema of the source table
        DataTable dtSchemaSource = objDbSource.GetSchemaTable(SchemaSource, Name);
        //Make the schema of the target table
        DataTable dtSchemaTarget = objDbTarget.GetSchemaTable(SchemaTarget, Name);
+4
source share
3 answers

I believe that SELECT TOP 1 *you need to use insteadSELECT * FROM .... LIMIT 1

+4
source

You need to check that the table name is null or empty

if(!string.IsNullOrEmpty(fullTableName))
 string sql = string.Format("SELECT * FROM {0} LIMIT 1", fullTableName);

for SQLLITE

SELECT * FROM Table_Name LIMIT 1;

for SQL

SELECT TOP 1 * FROM Table_Name;
+1
source

:

SELECT * FROM SAMPLE_TABLE ORDER BY ROWID ASC LIMIT 1
+1

All Articles