Example #1
0
        // return:
        //      -1  出错
        //      0   成功
        public int Write(
            string strDatabaseName,
            KeyCollection keys,
            delegate_getfilename getfilename,
            out string strError)
        {
            strError = "";

            // 确保 keys 里面的事项是排序过的。如果没有排序,本函数也能工作,只是效率略低
            DelayTable    table     = null;
            KeyCollection part_keys = new KeyCollection();

            foreach (KeyItem item in keys)
            {
                if (table == null)
                {
                    table = GetTable(strDatabaseName, item.SqlTableName);
                    if (string.IsNullOrEmpty(table.FileName) == true)
                    {
                        string strFilename = getfilename(strDatabaseName, item.SqlTableName);
                        int    nRet        = table.Create(strFilename, out strError);
                        if (nRet == -1)
                        {
                            return(-1);
                        }
                    }
                }
                else
                {
                    if (table.TableName != item.SqlTableName)
                    {
                        if (part_keys.Count > 0)
                        {
                            table.Write(part_keys);
                            part_keys.Clear();
                        }

                        table = GetTable(strDatabaseName, item.SqlTableName);
                        if (string.IsNullOrEmpty(table.FileName) == true)
                        {
                            string strFilename = getfilename(strDatabaseName, item.SqlTableName);
                            int    nRet        = table.Create(strFilename, out strError);
                            if (nRet == -1)
                            {
                                return(-1);
                            }
                        }
                    }
                }

                part_keys.Add(item);
            }

            if (part_keys.Count > 0)
            {
                Debug.Assert(table != null, "");
                table.Write(part_keys);
                part_keys.Clear();
            }

            return(0);
        }