0

ページにファイル アップロード コントロールと「アップロード」ボタンがあります。Word ファイルをデータベースにアップロードするためのコードを書き込もうとしています。

以下のコードを見つけてください:-

if (FileUpload1.HasFile)
            {

                string fileextention = System.IO.Path.GetExtension(FileUpload1.FileName);
                if (fileextention == ".doc" || fileextention == ".docx")
                {
                    string filename = System.IO.Path.GetFileName(FileUpload1.FileName);
                    //Upload file
                    FileUpload1.SaveAs(Server.MapPath("~/DocumentCollection/")  + filename);
                    string fullpath = "DocumentCollection/" + filename;
                    string query = "insert into dbo.DocumentMaster(Name,Path) values(" + filename + "," + "DocumentCollection/" + filename + ");";
                    SqlDataAdapter objda = new SqlDataAdapter(query, objcon);


                    objcon.Open();
                    objda.SelectCommand.ExecuteNonQuery();
                    objcon.Close();
                    Label2.Text = " successfully uploaded.";

                }
                else
                {
                    Label2.Text = "Selected File is not a word document file.";
                }

私のDB構造:-

CREATE TABLE [dbo].[DocumentMaster](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [varchar](100) NULL,
    [Path] [varchar](100) NULL,
 CONSTRAINT [PK_DocumentMaster] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

しかし、word.docx ファイルをアップロードしようとするとエラーが発生します。word.docx がアプリケーションの DocumentCollection フォルダーに正常にアップロードされました。

マルチパート識別子「word.docx」をバインドできませんでした。列名 'DocumentCollection' が無効です。マルチパート識別子「word.docx」をバインドできませんでした。

私を助けてください。

4

1 に答える 1

0

これは基本的に、データベースに送信しているものです。

insert into dbo.DocumentMaster(Name,Path) values(word.docx,DocumentCollection/word.docx)

ご覧のとおり、値の部分に「文字列」を送信していません。

これを行うことができます:

string query = "insert into dbo.DocumentMaster(Name,Path) values('" + filename + "','" + "DocumentCollection/" + filename + "');";

したがって、結果として次のクエリが得られます。

insert into dbo.DocumentMaster(Name,Path) values('word.docx','DocumentCollection/word.docx')

問題を解決するには、まだ SQL インジェクションの影響を非常に受けやすくなっています。代わりに、パラメーター化されたクエリを使用することを強くお勧めします。

于 2013-07-03T08:55:26.120 に答える