BLOB,插入SQL数据库

时间:2011-10-28 11:28:10

标签: c# asp.net sql blob

我有一个我无法解决的错误......我真的不知道为什么。

我正在使用此代码在我的数据库中上传文件,我现在想使用BLOB。

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(max)的隐式转换。使用CONVERT函数运行此查询。”

有人可以告诉我为什么吗?

非常感谢你。

1 个答案:

答案 0 :(得分:2)

我认为,问题在于您将图像的byte []作为字符串传递,因为您将其用单引号括起来。

删除此处的单引号:

'" + FileUpload1.FileBytes + "'"

还有一项建议:使用参数进行查询。你可以避免sql注入攻击,你的查询运行得更快,你将来会消除这种错误。

更新 - 使用参数:

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();