我想知道为什么我的数据不能永久保存在我的本地数据库中。如果我关闭我的应用程序并再次打开它。我无法下载上传的数据。它显示一个名为&#34的错误;给定的密钥不在字典“中 但我可以在应用程序运行时下载该文件。我的意思是,如果应用程序正在运行并且我将数据上传到我的网格,那么下载它不会引发任何错误。如果应用程序已关闭并打开,那么当我尝试下载相同的旧文件时,它会抛出错误
我的代码
private void DownloadAttachment(DataGridViewCell dgvCell)
{
string fileName = Convert.ToString(dgvCell.Value);
//Return if the cell is empty
if (fileName == string.Empty)
return;
FileInfo fileInfo = new FileInfo(fileName);
string fileExtension = fileInfo.Extension;
byte[] byteData = null;
//show save as dialog
using (SaveFileDialog saveFileDialog1 = new SaveFileDialog())
{
//Set Save dialog properties
saveFileDialog1.Filter = "Files (*" + fileExtension + ")|*" + fileExtension;
saveFileDialog1.Title = "Save File as";
saveFileDialog1.CheckPathExists = true;
saveFileDialog1.FileName = fileName;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
cncInfoDataGridView.Rows[dgvCell.RowIndex].Cells[1].Value = fileInfo.Name;
byteData = _myAttachments[dgvCell.RowIndex];
File.WriteAllBytes(saveFileDialog1.FileName, byteData);
}
}
}
答案 0 :(得分:0)
答案 1 :(得分:0)
最后,我制作了一个自定义数据库,我将存储我上传的所有数据。感谢所有亲爱的朋友,他们指导我设置我的全新数据库..
答案 2 :(得分:0)
好的尝试一下,它将完美地工作。如果它是基于服务器的数据库,那么试试这个..
string s = cncInfoDataGridView.Rows[dgvCell.RowIndex].Cells[1].Value.ToString();
File.WriteAllBytes(saveFileDialog1.FileName, byteData);
byteData = System.Text.Encoding.ASCII.GetBytes(s);
如果您使用的是本地数据库,请尝试以下代码。
SqlCeConnection cnn = new SqlCeConnection(Properties.Settings.Default.CncConnectionString);
FileInfo fileInfo = new FileInfo(fileDialog.FileName);
byte[] SqlTypeBlob = File.ReadAllBytes(fileDialog.FileName);
cncInfoDataGridView.Rows[dgvCell.RowIndex].Cells[1].Value = fileInfo.Name;
SqlCeCommand cmd = new SqlCeCommand("INSERT INTO CncInfo (Drawings) VALUES (@DATA)", cnn);
cmd.Parameters.Add("@DATA", SqlDbType.VarBinary);
cmd.Parameters["@DATA"].Value = SqlTypeBlob;
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
如果还有其他什么呢
byteData = _myAttachments[dgvCell.ColumnIndex];
File.WriteAllBytes(saveFileDialog1.FileName, byteData);
如果有效,请关闭此处并批准我点击我的答案。和平!!!!!!!!