Database 当磁盘上没有可用空间时,SQL Server CE不会给出错误

Database 当磁盘上没有可用空间时,SQL Server CE不会给出错误,database,sql-server-ce,Database,Sql Server Ce,我在web服务中使用SQL Server CE(版本=4.0.0.0,区域性=中立,PublicKeyToken=89845dcd8080cc91)。问题是,如果数据库所在的硬盘上没有更多空间,SQL Server CE驱动程序在执行查询时不会返回错误 测试环境和测试步骤: 测试数据库位于驱动器E:(闪存)上 磁盘上有80kb的可用空间-数据库大小为64KB 我多次将insert调用到临时表中(请参见下面的代码),没有问题——数据被插入。当插入的行数足够时,SQL Server CE会再分配64

我在web服务中使用SQL Server CE(版本=4.0.0.0,区域性=中立,PublicKeyToken=89845dcd8080cc91)。问题是,如果数据库所在的硬盘上没有更多空间,SQL Server CE驱动程序在执行查询时不会返回错误

测试环境和测试步骤:

  • 测试数据库位于驱动器E:(闪存)上
  • 磁盘上有80kb的可用空间-数据库大小为64KB
  • 我多次将insert调用到临时表中(请参见下面的代码),没有问题——数据被插入。当插入的行数足够时,SQL Server CE会再分配64KB
  • 现在磁盘上有16kb的空闲空间,数据库大小是128KB
  • 我多次向临时表中调用insert(请参见下面的代码),在成功插入数次之后,不再插入更多的行,也不会出现错误
  • 数据库为128KB,驱动器E:上没有更多空间用于分配下一页。但是
    mycommand.ExecuteNonQuery()
    返回1(这必须是插入的行数),并且没有错误。代码如下所示:

    string connString = "Data Source=E:\temp\logs\testDB.sdf;Persist Security Info=False; max database size=4090; max buffer size=4096; default lock timeout=3000; autoshrink threshold=100; Case Sensitive=true;";
    
    using (SqlCeConnection conn = new SqlCeConnection(connString)) 
    {
        string sql = "insert into temp (status, step, dt, data) values (1,'Register','2015-12-21 16:43:59',0,0,'Test Data')";
    
        SqlCeCommand mycommand = conn.CreateCommand();
        mycommand.CommandText = sql;
    
        int result = mycommand.ExecuteNonQuery(); //always 1
    
        conn.Close()
    }
    
    我测试的也是事件处理程序方法:

    public static void MessageEventHandler(object sender, SqlCeInfoMessageEventArgs e) {
       foreach (SqlError error in e.Errors){
            Console.WriteLine("problem with sql: " + error);
            throw new Exception("problem with sql: " + error);
        }
    }
    
    在打开连接之前

    conn.InfoMessage += new SqlInfoMessageEventHandler( MessageEventHandler );
    
    但MessageEventHandler从未连接

    是否有方法抛出错误,或者我的代码理解操作
    ExecuteNonQuery
    失败(我不想对磁盘上的可用空间进行额外检查等)-只是错误或结果为0