我可以将不同的文件类型存储到 SQL Server 数据库中吗?

Posted

技术标签:

【中文标题】我可以将不同的文件类型存储到 SQL Server 数据库中吗?【英文标题】:Can I store difference file types into SQL Server database? 【发布时间】:2017-11-14 14:36:16 【问题描述】:

我已经创建了一个 vb.net 项目和一个 SQL Server 数据库,我想将我其他创建的项目与其中的一些描述一起存储到数据库中。我不知道我可以这样做,或者我可以首先将我的项目文件存储到数据库中。我想将我的项目文件压缩为 zip 文件,然后将 zip 文件存储到数据库中,但我不知道是否可以将这些文件存储到包含很多文件类型的数据库中,例如(jar、java、sln、 vb、c#、txt ...等)?

感谢您的帮助。

【问题讨论】:

您应该研究现有的版本控制解决方案,例如 git/github、svn、mercurial 等 数据库不是文件系统或 blob 容器,如果您尝试将其作为一个整体使用,您会遇到麻烦。您应该问问自己,您认为数据库会为您解决什么问题 - 几乎可以肯定,通过良好的备份策略和/或源代码控制可以更好地解决问题。 为什么要在数据库中存储文件? (提示:您可能不应该这样做。)而且,我想更多的是问题......是什么阻止您将文件存储在数据库中?当您在 Google 上查找“在 SQL Server 中存储文件”之类的内容时,您会发现什么?因为我发现了这个(在许多其他事情中):***.com/questions/13420305/… 文件 type 与存储它没有任何关系。那么您尝试了哪些方法,问题究竟出在哪里? 我不会忽略这些 cmets,实际上 NOT 将文件存储在您的数据库中。 【参考方案1】:

是的,您可以将文件存储在 SQL Server 数据库表中。我强烈建议您将它们压缩成一个 zip 文件。

第一步是创建一个表:

CREATE TABLE Files
(
     Id INT IDENTITY PRIMARY KEY,
     FileData VARBINARY(MAX) FILESTREAM  NULL,
     Name NVARCHAR(300)
)

然后将您的 zip 文件作为流打开并将其插入到您的表格中。

OpenFileDialog openFileDlg = new OpenFileDialog();
openFileDlg.InitialDirectory = Directory.GetCurrentDirectory();

if (openFileDlg.ShowDialog() == DialogResult.OK)

    FileInfo fi = new FileInfo(openFileDlg.FileName);
    FileStream fs = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read);
    BinaryReader rdr = new BinaryReader(fs);
    byte[] fileData = rdr.ReadBytes((int)fs.Length);
    rdr.Close();
    fs.Close();

    string cs = @"Data Source=<your server>;Initial Catalog=MyFsDb;Integrated Security=TRUE";

    using (SqlConnection con = new SqlConnection(cs))
    
        con.Open();
        string sql = "INSERT INTO Files VALUES (@Data, @Name)";

        SqlCommand cmd = new SqlCommand(sql, con);
        cmd.Parameters.Add("@Data", SqlDbType.Image, fileData.Length).Value = fileData;
        cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value = fi.Name;

        cmd.ExecuteNonQuery();
        con.Close();
    

    MessageBox.Show(fi.FullName, "File Inserted!", MessageBoxButtons.OK, MessageBoxIcon.Information);

来源:MSDN

【讨论】:

感谢我所需要的。

以上是关于我可以将不同的文件类型存储到 SQL Server 数据库中吗?的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 MS Sql Server 存储过程导出到 excel 文件

将 .NET 类型映射到 SQL Server 200 数据类型

SQL Server 存储过程参数 - 不同类型

sql server 货币 字段 类型 一般用啥类型?

SQL Server 文件和文件组

通过数据库上下文将空 DataTable 传递给 SQL Server 存储过程