C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 72 を表示中)
■41811 / )  Office2007形式のファイルをDBに登録すると破損
□投稿者/ ごっち (1回)-(2009/09/30(Wed) 18:54:26)

分類:[ASP.NET (VB)] 

こんにちは。

Web画面で選択したファイルをSQL Serverに格納しています。

いままで問題なかったのですが、Office2007形式のファイル(docx/xlsx)を登録し、
ダウンロードすると「ファイルは破損しており、開けません。」のメッセージが表示されてしまいます。
そのまま続行して「開いて修復」を実行するとファイルは開けます。

何がいけないのでしょうか。
お気づきの点があれば教えてください。


■テーブル
CREATE TABLE [dbo].[T_FILE](
[TASK_NO] [nvarchar](10) NOT NULL,
[REPORT_NO] [int] NOT NULL,
[FILENAME] [nvarchar](255) NULL,
[FILEEXT] [nvarchar](10) NULL,
[TYPE] [nvarchar](255) NULL,
[FILEIMG] [varbinary](max) NULL,
CONSTRAINT [PK_T_FILE] PRIMARY KEY CLUSTERED
(
[TASK_NO] ASC,
[REPORT_NO] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


■プログラムソース(抜粋)
'添付ファイル登録
Public Function FileToDB(ByVal blnDel As Boolean, ByVal fu As FileUpload, ByVal strTASK_NO As String, ByVal strREPORT_NO As String) As Boolean
If Not String.IsNullOrEmpty(fu.PostedFile.FileName) Then
Dim strSQL As String = _
"INSERT INTO T_FILE(TASK_NO, REPORT_NO, FILENAME, FILEEXT, TYPE, FILEIMG) " & _
"VALUES (@TASK_NO, @REPORT_NO, @FILENAME, @FILEEXT, @TYPE, @FILEIMG)"
Dim objDb As New SqlConnection(GetConnectionString)
Dim objCom As New SqlCommand(strSQL, objDb)
Dim recAffected As Integer
'削除
If blnDel Then
DeleteFile(strTASK_NO, strREPORT_NO)
End If
'パラメータ設定
Dim strFileName As String = Path.GetFileName(fu.PostedFile.FileName)
Dim strExtension As String = strFileName.Substring(strFileName.LastIndexOf(".")).Replace(".", "").ToLower
objCom.Parameters.AddWithValue("@TASK_NO", strTASK_NO)
objCom.Parameters.AddWithValue("@REPORT_NO", strREPORT_NO)
objCom.Parameters.AddWithValue("@FILENAME", strFileName)
objCom.Parameters.AddWithValue("@FILEEXT", strExtension)
objCom.Parameters.AddWithValue("@TYPE", fu.PostedFile.ContentType)
'ファイルを入力ストリーム経由でbyte配列に読み込む
Dim aryData(fu.PostedFile.ContentLength) As Byte
fu.PostedFile.InputStream.Read(aryData, 0, fu.PostedFile.ContentLength)
objCom.Parameters.AddWithValue("@FILEIMG", aryData)
'登録
objDb.Open()
recAffected = objCom.ExecuteNonQuery()
objDb.Close()
End If
Return True
End Function

'添付ファイル削除
Public Function DeleteFile(ByVal strTASK_NO As String, ByVal strREPORT_NO As String) As Boolean
Dim strSQL As String = _
"DELETE FROM T_FILE " & _
"WHERE TASK_NO = @TASK_NO " & _
" AND REPORT_NO = @REPORT_NO"
Dim objDb As New SqlConnection(GetConnectionString)
Dim objCom As New SqlCommand(strSQL, objDb)
Dim recAffected As Integer
'パラメータ設定
objCom.Parameters.AddWithValue("@TASK_NO", strTASK_NO)
objCom.Parameters.AddWithValue("@REPORT_NO", strREPORT_NO)
'削除
objDb.Open()
recAffected = objCom.ExecuteNonQuery()
objDb.Close()
Return True
End Function

返信 編集キー/


管理者用

- Child Tree -