BLOB, вставить базу данных SQL - PullRequest
0 голосов
/ 28 октября 2011

У меня есть ошибка, которую я не могу исправить ... Я действительно не знаю почему.

Я использую этот код для загрузки файла в свою базу данных, я хочу использовать 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) недопустимо.функция для запуска этого запроса. "

Может кто-нибудь сказать мне, почему?

Большое спасибо.

1 Ответ

2 голосов
/ 28 октября 2011

Проблема, я думаю, в том, что вы передаете байт [] вашего изображения в виде строки, потому что заключаете его в одинарные кавычки.

Удалите здесь одинарные кавычки:

'" + 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...