文件插入到文件流目录中,但不插入到SQL Server 2012表中。 C#ASP

时间:2017-04-25 14:37:23

标签: c# sql asp.net sql-server filestream

我在设置数据库以接受文件时遇到了困难。我并不完全理解我所做的事情,这肯定是愚蠢的。我会尝试尽可能多地包含图像和描述,以确定我所做的事情,并希望能够辨别出哪些内容丢失或错误。

enter image description here 我已在配置管理器中启用了文件流以进行完全访问。

enter image description here 在SQL 2012 Management Studio中的服务器级别上。

enter image description here 这里是SQL 2012 Management Studio中的数据库级别

enter image description here 这是我在该数据库中用于插入文件并稍后使用我的asp.net应用程序检索它们的表。

string constr = ConfigurationManager.ConnectionStrings["ChangeDb"].ConnectionString;
            using (SqlConnection con = new SqlConnection(constr)) {
                foreach (HttpPostedFile postedFile in ReleaseNotesFile.PostedFiles) {
                    string file = Path.GetFileName(postedFile.FileName);
                    var fileSplit = file.Split('.');
                    string filename = fileSplit[0];
                    string fileextension = fileSplit[1];
                    string contentType = postedFile.ContentType;
                    using (Stream fs = postedFile.InputStream) {
                        using (BinaryReader br = new BinaryReader(fs)) {
                            byte[] bytes = br.ReadBytes((Int32)fs.Length);
                            using (SqlCommand cmd = new SqlCommand("dbo.InsertFile", con)) {
                                try {
                                    cmd.CommandType = CommandType.StoredProcedure;
                                    cmd.Parameters.AddWithValue("@FileName", filename);
                                    cmd.Parameters.AddWithValue("@FileExtension", fileextension);
                                    cmd.Parameters.AddWithValue("@ChangeId", 27);
                                    cmd.Parameters.AddWithValue("@FileType", "ReleaseNotes");
                                    cmd.Parameters.AddWithValue("@ContentType", contentType);
                                    cmd.Parameters.AddWithValue("@Chart", bytes);
                                    cmd.ExecuteNonQuery();
                                }
                                catch (SqlException sqlex) {
                                    throw new Exception("SQL Exception on inserting ReleaseNotes file. " + sqlex.Message);
                                }
                                catch (Exception ex) {
                                    throw new Exception("Error inserting ReleaseNotes file. " + ex.Message);
                                }
                            }
                        }
                    }
                }
            }

这是我的c#代码后面的文件插入存储过程。

enter image description here 这是保存文件流的位置(ChangeGovernanceFiles)

enter image description here 正如我们在这里看到的那样,它实际上将我通过我的应用程序提交的文件带到了这个目录中。然而...

enter image description here 尽管没有抛出任何错误或异常,但没有任何内容插入到表中。

我已经从很多教程和资源中完成了我所做的一切,以便使用我现有的asp.net应用程序,而且我对它的理解很少。有人能够找出我失踪的东西吗?

非常感谢您的帮助

编辑,添加我的sql设置和存储过程的另一张图片,我认为可能会进一步帮助辨别缺少的内容。

EXEC sp_configure filestream_access_level, 2  
RECONFIGURE  

alter database ChangeGovernance
add filegroup fsGroup contains filestream;
go

alter database ChangeGovernance
add file
  ( NAME = 'fsChangeGovernance', FILENAME = 'G:\ChangeGovernanceFiles'
   )
to filegroup fsGroup;
go

DROP TABLE ChangeGovernance.dbo.ChangeFiles
GO

CREATE TABLE ChangeGovernance.dbo.ChangeFiles
(
    [ChangeFileId] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWID(), 
    [SerialNumber] INTEGER UNIQUE,
    [Chart] VARBINARY(MAX) FILESTREAM NULL,
    [FileName] NVARCHAR(50) NOT NULL,
    [FileExtension] NVARCHAR(10) NOT NULL,
    [ChangeId] INT NOT NULL,
    [FileType] NVARCHAR(50),
    [ContentType] NVARCHAR(MAX)
)
GO

--Files insert stored proc
DROP PROCEDURE dbo.InsertFile
GO

CREATE PROCEDURE dbo.InsertFile
@Chart VARBINARY(MAX), @FileName NVARCHAR(50), @FileExtension NVARCHAR(10), @ChangeId INT, 
@FileType NVARCHAR(50), @ContentType NVARCHAR(MAX)
AS
BEGIN
INSERT INTO dbo.ChangeFiles (Chart, FileName, FileExtension, ChangeId, FileType, ContentType)
VALUES (@Chart, @FileName, @FileExtension, @ChangeId, @FileType, @ContentType)
END
GO

我设置文件共享,文件夹,我的表和我要插入的存储过程。

0 个答案:

没有答案