保存到数据库之前临时存储数据

时间:2014-08-24 16:08:46

标签: php postgresql yii

我正在使用Yii框架开发一个应用程序,我需要在保存到数据库之前临时存储数据。

屏幕分为主屏幕和细节。

使用CGridview显示细节部分。

我想暂时将数据存储在CGridview中,当点击保存按钮时,它将存储到数据库中。临时数据应该是可编辑的,可以删除。

我想过将它存储在会话中,但是如何为行生成新的主键ID?

还清空表,然后将CGridview中的所有值插入到表中是不可能的,因为我将这些ID链接到相同数据的历史表。

我该怎么做?

请帮忙。

2 个答案:

答案 0 :(得分:0)

如果您使用的框架允许,我建议在从属表视图中的新行呈现给用户之前从数据库中检索(并保留)下一个主键值,并在行所用时使用它存储在数据库中(以及引用主表视图行的其他行)。 为此,您可以指定主键列应接受来自特定序列的值,以保证其唯一性。

如果您的表已经存在且您不想重新创建它,其中一种方法是遵循以下步骤:

  1. 防止在整个操作完成之前将新行插入表中。
  2. 创建一个起始值大于最大现有主键值的序列,并将序列与主键列相关联,例如:

    创建序列foo_id_seq START with 1000; ALTER TABLE foo ALTER COLUMN id SET DEFAULT nextval('foo_id_seq');

  3. 确保所有新行都从该序列中获取主键值。下一个序列值可以通过以下方式获得:

    SELECT nextval('foo_id_seq');

  4. 这些文档中的更多信息: http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL http://www.postgresql.org/docs/current/static/sql-createsequence.html

答案 1 :(得分:-1)

试试这样.. 用于存储数据温度的变量。

 _myAttachments = new Dictionary<int, byte[]>();

并将数据附加到临时变量

private void UploadAttachment(DataGridViewCell dgvCell)
    {
        if (DataGridView.SelectedCells.Count == 1 && DataGridView.SelectedCells[0].ColumnIndex == 2)
        {
            using (OpenFileDialog fileDialog = new OpenFileDialog())
            {
                //Set File dialog properties
                fileDialog.CheckFileExists = true;
                fileDialog.CheckPathExists = true;
                fileDialog.Filter = "All Files|*.*";
                fileDialog.Title = "Select a file";
                fileDialog.Multiselect = false;

                if (fileDialog.ShowDialog() == DialogResult.OK)
                {
                    FileInfo fileInfo = new FileInfo(fileDialog.FileName);
                    byte[] binaryData = File.ReadAllBytes(fileDialog.FileName);
                    DataGridView.Rows[dgvCell.RowIndex].Cells[2].Value = fileInfo.Name;

                    if (_myAttachments.ContainsKey(dgvCell.RowIndex))
                        _myAttachments[dgvCell.RowIndex] = binaryData;
                    else
                        _myAttachments.Add(dgvCell.RowIndex, binaryData);
                }
            }
        }
    }