2011-10-28 195 views
0

我有一個錯誤,我無法修復...我真的不知道爲什麼。我正在使用此代碼tu上傳一個文件在我的數據庫中,我想現在使用BLOB。BLOB,插入SQL數據庫

if (FileUpload1.HasFile) 
        try 
        { 

         //FileUpload1.SaveAs("C:\\inetpub\\wwwroot\\ClientPortalCs\\" 
         //+ GetTheCurrentDirectory(MyTreeView.SelectedNode) 
         //+ "\\" + FileUpload1.FileName); 
         //LabelFile.Text = "File name: " + 
         //FileUpload1.PostedFile.FileName + "<br>" + 
         //FileUpload1.PostedFile.ContentLength + " kb<br>" + 
         //"Content type: " + FileUpload1.PostedFile.ContentType; 

         dbConnection.Open(); 
         dynamic queryString = ("INSERT INTO Files (Name,Path,UserUpload,Date,Data) VALUES ('" 
         + FileUpload1.FileName + "','" + GetTheCurrentDirectory(MyTreeView.SelectedNode) + "','" + Request.Cookies["UserSettings"]["UserName"] + "','" + DateTime.Now + "','" + FileUpload1.FileBytes + "');" 
         + "SELECT CAST(scope_identity() AS int)"); 

         SqlCommand theCommand1 = new SqlCommand(queryString, dbConnection); 

         int newFid = (Int32)theCommand1.ExecuteScalar(); 

         dynamic queryStringFolder = ("INSERT INTO FILES_FOLDERS (Folder_Id,File_Id) VALUES ('" 
         + MyTreeView.SelectedValue + "'," + "'" + newFid + "')"); 
         theCommand1 = new SqlCommand(queryStringFolder, dbConnection); 

         theCommand1.ExecuteNonQuery(); 

         dbConnection.Close(); 

        } 

在我的數據庫中,表格文件中的字段DATA是一個varbinary(max)。 查詢中的DATA字段參數是我嘗試上傳的文件的字節數。

的出錯是: 「從數據類型爲varchar到VARBINARY(最大值)錯誤隱式轉換是不允許使用CONVERT函數來運行此查詢。」

有人能告訴我爲什麼嗎?

非常感謝。

+0

這樣的代碼只是乞討[SQL注入攻擊(http://xkcd.com/327/)。請使用參數化查詢。 – GvS

回答

2

我認爲,問題在於,您將圖像的字節[]作爲字符串傳遞,因爲您將它用單引號引起來。

在這裏刪除單引號:

'" + FileUpload1.FileBytes + "'" 

還有一個建議:使用參數查詢。您將免受SQL注入攻擊,您的查詢可能會運行得更快,您將在未來消除此類錯誤。

UPDATE - 使用參數:

string queryString = "INSERT INTO Files (Name,Path,UserUpload,Date,Data) VALUES (@Name,@Path,@UserUpload,@Date,@Data)"; 
SqlCommand theCommand1 = new SqlCommand(queryString, dbConnection); 
theCommand1.Parameters.AddWithValue("@Name",FileUpload1.FileName); 
theCommand1.Parameters.AddWithValue("@Path",GetTheCurrentDirectory(MyTreeView.SelectedNode)); 
theCommand1.Parameters.AddWithValue("@UserUpload",Request.Cookies["UserSettings"]["UserName"]); 
theCommand1.Parameters.AddWithValue("@Data",FileUpload1.FileBytes); 
theCommand1.Parameters.AddWithValue("@Date",DateTime.Now); 

int newFid = (Int32)theCommand1.ExecuteScalar(); 
+0

好的!但爲什麼現在我得到這個錯誤? 錯誤對象或列名缺失或爲空。對於SELECT INTO語句,請確認每列都有一個名稱。對於其他語句,查找空的別名。別名定義爲「」或[]是不允許的。將別名更改爲有效的名稱。 ''附近語法不正確。 – Kiwimoisi

+0

@Emged你現在有一個不正確的語法。打印您發送給SQL Server的sql語句並查看它的外觀。 – Icarus

+0

是的.. INSERT INTO文件(名稱,路徑,UserUpload,日期,數據)VALUES('WSB BOXE 20.jpg','Projects // TEST /','Admin','2011/10/28 12:41 :16 PM',System.Byte []); SELECT CAST(scope_identity()AS int) 它看起來不好.. – Kiwimoisi