Edward Mergel Ответов: 1

Не допускается изменение свойства connectionstring


На моей странице загрузки фотографий, когда я тестирую ее и пытаюсь загрузить фотографию, я постоянно получаю следующее сообщение об ошибке: не разрешено изменять свойство ConnectionString. Текущее состояние соединения открыто.

Я сканировал и читал строку за строкой, и я все еще не могу найти, где я оставил соединение с БД открытым и не закрыл его, или есть еще одна проблема, вызывающая это? Я новичок в noivce, так что будьте нежны.

Что я уже пробовал:

Imports System
Imports System.Collections.Generic
Imports System.Drawing
Imports System.IO
Imports System.Drawing.Imaging
Imports System.Drawing.Drawing2D


Partial Class members_uploadphoto
    Inherits System.Web.UI.Page
    Dim cf As New comonfunctions


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        '   Response.Write(Now.Year.ToString & Now.Month.ToString & Now.Day.ToString & Now.Hour.ToString & Now.Minute.ToString & Now.Millisecond)
        Dim myreader As System.Data.OleDb.OleDbDataReader
        Dim cn As New System.Data.OleDb.OleDbConnection
        Dim cmd As New System.Data.OleDb.OleDbCommand
        Dim strsql As String = ""
        Dim mcount As Integer = 0

        strsql = "select count(*) from photo where pid='" & Session("pid") & "'"
        cn.ConnectionString = cf.friendshipdb
        cn.Open()

        cmd.Connection = cn
        cmd.CommandText = strsql
        myreader = cmd.ExecuteReader


        If myreader.HasRows = True Then
            While myreader.Read
                mcount = myreader.GetValue(0)
            End While
        End If

        If mcount >= 200 Then
            upimage.Text = "You Can only Upload 200 Photos"
            upimage.Enabled = False
        End If

        cn.Close()

    End Sub

    Protected Sub upimage_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles upimage.Click
        Dim msg As String = ""
        Dim filecopy As String = ""
        Dim x As Integer = 0
        Dim y As Integer = 0

        If Not FileUpload1.PostedFile Is Nothing And FileUpload1.PostedFile.ContentLength > 0 Then

            'Dim fn As String = System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName)
            Dim ext As String = ""
            ext = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName)

            Dim SaveLocation As String = Server.MapPath("..\App_Themes") & "\"
            Try

                If (FileUpload1.PostedFile.ContentType = "image/gif" Or FileUpload1.PostedFile.ContentType = "image/pjpeg" Or FileUpload1.PostedFile.ContentType = "image/jpeg" Or FileUpload1.PostedFile.ContentType = "image/png" Or FileUpload1.PostedFile.ContentType = "image/bmp" Or FileUpload1.PostedFile.ContentType = "image/bitmap" Or FileUpload1.PostedFile.ContentType = "image/jpg" Or FileUpload1.PostedFile.ContentType = "image/tiff") Then

                    msg = addentry(ext)
                    SaveLocation = SaveLocation & msg & "11" & ext
                    filecopy = Server.MapPath("..\App_Themes") & "\" & msg & ext

                    FileUpload1.PostedFile.SaveAs(SaveLocation)

                    '  watermark(SaveLocation, "aminnn")
                    '  Response.Write("The file has been uploaded.")


                    Dim objImage As System.Drawing.Image = System.Drawing.Image.FromFile(SaveLocation)
                    'From File
                    Dim height As Integer = objImage.Height
                    'Actual image width
                    Dim width As Integer = objImage.Width
                    'Actual image height
                    Dim bitmapimage As New System.Drawing.Bitmap(objImage, width, height)
                    ' create bitmap with same size of Actual image
                    Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bitmapimage)
                    'Creates a System.Drawing.Color structure from the four ARGB component
                    '(alpha, red, green, and blue) values. Although this method allows a 32-bit value
                    ' to be passed for each component, the value of each component is limited to 8 bits.
                    'create Brush
                    Dim brush As New SolidBrush(Color.FromArgb(113, 255, 255, 255))

                    x = 10
                    y = objImage.Height / 2
                    'Adding watermark text on image
                    'g.DrawRectangle(Pens.Blue, x, y)
                    'g.Clear(Color.Green)

                    g.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit
                    g.DrawString(cf.websitename, New Font("Arial", 18, System.Drawing.FontStyle.Bold), brush, x, y)

                    g.DrawString(cf.websitename, New Font("Arial", 18, System.Drawing.FontStyle.Bold), brush, 100, y + 80)

                    'save image with Watermark image/picture
                    'bitmapimage.Save("watermark-image.jpg"); //if u want to save image

                    Response.ContentType = "image/jpeg"
                    bitmapimage.Save(filecopy)
                    bitmapimage.Dispose()
                    objImage.Dispose()

                    File.Delete(SaveLocation)
                    Label1.Text = "Photo Uploaded"
                Else
                    'Response.Write("file is not an image")
                    Response.Write("<br>file is " & FileUpload1.PostedFile.ContentType)
                End If
            Catch Exc As Exception
                Response.Write("Error: " & Exc.Message)
            End Try
        Else
            Response.Write("Please select a file to upload.")
        End If


    End Sub

    Function addentry(ByVal ext1 As String) As String
        Dim uid As String = ""

        Dim strfield As String = ""
        Dim strvalues As String = ""
        Dim strsql As String = ""
        Dim passw As String = ""

        Dim cnstring As String
        Dim cn As New System.Data.OleDb.OleDbConnection
        Dim cmd As New System.Data.OleDb.OleDbCommand
        Dim cmd2 As New System.Data.OleDb.OleDbCommand

        Dim photoid As String = ""
        Dim photoname As String = ""

        Dim myreader As System.Data.OleDb.OleDbDataReader

        cn.ConnectionString = cf.friendshipdb
        cn.Open()

        strsql = "select passw from photo where pid='" & Session("pid") & "' and (passw<>'' and passw is not null)"
        cmd2.Connection = cn
        cmd2.CommandText = strsql
        myreader = cmd2.ExecuteReader

        While myreader.Read
            passw = myreader.GetValue(0).ToString
        End While


        cnstring = ConfigurationManager.ConnectionStrings("accessconstr").ConnectionString
        cn.ConnectionString = cnstring
        cn.Close()

        cn.Open()

        uid = Now.Year.ToString & Now.Month.ToString & Now.Day.ToString & Now.Hour.ToString & Now.Minute.ToString & Now.Millisecond



        strfield = " insert into photo(photoid,photoname,pid,passw)"
        strvalues = " values(@photoid,@photoname,@pid,@passw)"

        strsql = strfield & strvalues

        cmd.Parameters.AddWithValue("@photoid", uid)
        cmd.Parameters.AddWithValue("@photoname", uid & ext1)
        cmd.Parameters.AddWithValue("@pid", Session("pid"))
        cmd.Parameters.AddWithValue("@passw", passw)

        cmd.Connection = cn
        cmd.CommandText = strsql
        cmd.ExecuteNonQuery()

        addentry = uid
        cn.Close()

    End Function


End Class

1 Ответов

Рейтинг:
4

Atlapure Ambrish

Добавьте свой код, который разговаривает с базой данных в блоке try...catch, и закройте соединение также в блоке finally. Это гарантирует, что если в вашем коде есть исключение перед вызовом метода закрытия соединения, то последний должен позаботиться о закрытии вашего соединения. Лучше всего использовать блок using для вашего соединения. Google, чтобы узнать, как управлять подключением vb.net. Еще одним улучшением в вашем коде является использование параметризованного запроса, чтобы ваш код не был уязвим для SQL-инъекций. Я уверен, что вы найдете много информации в Google.


Edward Mergel

Хорошо, Проблема со строкой подключения была решена, но не тогда, когда я пытаюсь загрузить, я не получаю никаких результатов, и изображение, которое я пытаюсь загрузить, не загружается, а также не записывается в базу данных MS. Я еще не сделал использование, но я все еще читаю на нем, так что, может быть, это проблема? Вот код как он выглядит сейчас:

Система Импорта
Система Импорта.Коллекции.Общий
Система Импорта.Рисование
Система Импорта.ИО
Система Импорта.Рисование.Изображений
Система Импорта.Рисование.Drawing2D


Частичные члены Класса_uploadphoto
Наследует System.Веб.Пользовательского интерфейса.Страницы
Dim cf как новые comonfunctions


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Обрабатывает Меня. Load
- Ответ.Запись(Теперь.Год.ToString & Now.Месяц.Метод toString & сейчас.День.Метод toString & сейчас.Час.ToString & Now.Минута.Метод toString & сейчас.Миллисекунды)
Дим myreader как системы.Данных.Oledb для.И oledbdatareader
Dim cn как новая система. данные.Oledb для.Метод oledbconnection
Dim cmd как новая система. данные.OleDb. OleDbCommand
Dim strsql как строка = ""
Dim mcount As Integer = 0

strsql = "выбрать количество(*) из фото где PID='" &амп; сессии("пид") &ампер; "'"
спицы.Параметр connectionString = МВ.friendshipdb
спицы.Открыть()

УМК.Соединение = cn
УМК.CommandText = strsql
myreader = cmd.Метода executereader


Если мой читатель.HasRows = True Тогда
А myreader.Читать
mcount = myreader.GetValue(0)
Конец Пока
Конец, Если

Если mcount >= 200, то
upimage.Text = " вы можете загрузить только 200 фотографий"
upimage.Enabled = False
Конец, Если

спицы.Рядом()

Конец Подводной Лодки

Защищенные суб upimage_Click(как byval отправителя как объект, как byval E Как системы.EventArgs) обрабатывает upimage.Щелчок
Дим Сообщение Как строку = ""
Dim filecopy As String = ""
Dim x как целое число = 0
Dim y как целое число = 0
Dim cn как новая система. данные.Oledb для.Метод oledbconnection
Dim cmd как новая система. данные.OleDb. OleDbCommand

спицы.Параметр connectionString = МВ.friendshipdb
спицы.Открыть()

УМК.Соединение = cn


Если Нет, То FileUpload1.PostedFile-Это Ничто, А FileUpload1.PostedFile-Ничто.ContentLength > 0 тогда

'Dim fn As String = System.IO.Path.GetFileName(FileUpload1.PostedFile.имя файла)
Dim ext As String = ""
доб = система.ИО.Путь.GetExtension(FileUpload1.PostedFile.имя файла)

Dim SaveLocation As String = Сервер.MapPath ("..\App_Themes") & "\"


Попробуй
Поймать, Кроме Как Исключение
Если (FileUpload1.PostedFile.ContentType = "image/gif" или FileUpload1.PostedFile.ContentType = "image/pjpeg" или FileUpload1.PostedFile.ContentType = "image/jpeg" или FileUpload1.PostedFile.ContentType = "image/png" или FileUpload1.PostedFile.ContentType = "image/bmp" или FileUpload1.PostedFile.ContentType = "image/bitmap" или FileUpload1.PostedFile.ContentType = "image/jpg" или FileUpload1.PostedFile.ContentType = " image/tiff") Затем

msg = addentry(ext)
Качестве savelocation = качестве savelocation &амп; глутамат натрия &ампер; "11" &ампер; внутр
filecopy = сервер."\" &Амп("..\App_Themes") и усилитель MapPath;; глутамат натрия &ампер; внутр

FileUpload1.PostedFile.Сохранить Как(Качестве Savelocation)

'watermark(SaveLocation," aminnn")
' Ответ.Write ("файл был загружен.")


Dim objImage как система.Рисование.система визуализации.Рисование.Изображение.FromFile(SaveLocation)
- Из Досье
Dim height As Integer = objImage.Высота
'Фактическая ширина изображения
Dim width As Integer = objImage.Ширина
'Фактическая высота изображения
Тусклое растровое изображение как новая система.Рисование.Растровое изображение(objImage, width, height)
'создать растровое изображение с тем же размером фактического изображения

Edward Mergel

Вот остальная часть страницы извините:

'создать растровое изображение с тем же размером фактического изображения
Dim g как система.Рисование.графическая система.Рисование.Графика.FromImage(bitmapimage)
- Создает систему.Рисование.Цветовая структура из четырех компонентов ARGB
'(Альфа, красный, зеленый и синий) значения. Хотя этот метод допускает 32-битное значение
"для передачи для каждого компонента значение каждого компонента ограничено 8 битами.
"создать кисть
Тусклая кисть как новая сплошная кисть(цвет.FromArgb(113, 255, 255, 255))

x = 10
y = objImage.Высота / 2
"Добавление текста водяного знака на изображение
'g. DrawRectangle(пер. синий, x, y)
'g. Clear (цвет.Зеленый)

г. TextRenderingHint = Чертеже.Текст.TextRenderingHint.SingleBitPerPixelGridFit
g. DrawString(ср. websitename, New Font ("Arial", 18, System.Рисование.Стиль шрифта.Жирный), кисть, x, y)

g. DrawString(ср. websitename, New Font ("Arial", 18, System.Рисование.Стиль шрифта.Жирный), кисть, 100, y + 80)

'Сохранить Изображение с водяными знаками изображения/фотографии
- растровое изображение.Сохранить("watermark-image.jpg"); / / если вы хотите сохранить изображение

Ответ.ContentType = " изображение / jpeg"
растровое изображение.Сохранить (filecopy)
растровое изображение.Располагать()
objImage.Располагать()

Файл.Удалить(SaveLocation)
Этикетка 1.Text = " Фото Загружено"
Еще
- Ответ.Запись ("файл-это не изображение")
Ответ.Писать("файл" &амп; FileUpload1.PostedFile.Значение contentType)
Конец, Если



Ответ.Писать("ошибка:" &амп; предоставление услуг по монтажу.Сообщение)
Окончательно
Конец Попытки

Еще
Ответ.Напишите ("Пожалуйста, выберите файл для загрузки.")
Конец, Если
спицы.Рядом()
Конец Подводной Лодки

Помощью метода addentry функции(ext1 бывал как строка) как строку
Тусклый uid как строка = ""

Dim strfield как строка = ""
Dim strvalues As String = ""
Dim strsql как строка = ""
Dim passw As String = ""

Dim cnstring как строка
Dim cn как новая система. данные.Oledb для.Метод oledbconnection
Dim cmd как новая система. данные.OleDb. OleDbCommand
Dim cmd2 как новая система. данные.OleDb. OleDbCommand

Тусклый фотоид как струна = ""
Dim photoname как строка = ""

Дим myreader как системы.Данных.Oledb для.И oledbdatareader

спицы.Параметр connectionString = МВ.friendshipdb
спицы.Открыть()

strsql = "выбрать запрета от цены где PID='" &амп; сессии("пид") &ампер; "' и (запрета на< и GT;" и пароля не null)"
cmd2.Подключение = СN
cmd2. CommandText = strsql
myreader = cmd2. ExecuteReader

А myreader.Читать
passw = myreader.GetValue(0).Метод toString
Конец Пока


cnstring = диспетчер конфигураций.ConnectionStrings ("accessconstr").Параметр connectionString
cn. ConnectionString = cnstring


Уид = сейчас.Год.ToString & Now.Месяц.Метод toString & сейчас.День.Метод toString & сейчас.Час.ToString & Now.Минута.Метод toString & сейчас.Миллисекунды



strfield = " вставить в фотографию (photoid, photoname,pid, passw)"
strvalues = " значения (@photoid,@photoname,@pid,@passw)"

strsql = strfield &strvalues

УМК.Параметры.AddWithValue ("@photoid", uid)
УМК.Параметры.AddWithValue ("@photoname", uid &ext1)
УМК.Параметры.AddWithValue ("@pid", Session("pid"))
УМК.Параметры.AddWithValue ("@passw", passw)

УМК.Соединение = cn
УМК.CommandText = strsql
УМК.Метод executenonquery()

помощью метода addentry = жидкость
спицы.Рядом()

Конечная Функция


Конец Класса

Atlapure Ambrish

Я не вижу вашего кода, подобного приведенному ниже. Афера.Dispose закроет соединение и освободит связанные ресурсы.

Dim con как новый SqlClientConnection ( ...)

Попробуй
'Операции с БД (создание, чтение, обновление, удаление) здесь
кон.открыть()

SqlClientException поймать (экс)

- Разберись с исключением
Окончательно
'Код здесь всегда будет работать, независимо от того, удалось ли выполнить код try
- или если ты попадешь в ловушку. Вы можете смело звонить .рядом()
'или (как показано ниже) .dispose (), потому что если соединение уже
- закрыто / утилизировано, звонок ничего не делает.


- Утилизируйте то, что вам нужно, - это не только закроет дверь.
- связь, но она освободит .Чистая ссылка на
"удаленный ресурс, освобождающий этот ресурс (базу данных
- в данном случае) для обслуживания других клиентов.

против.Располагать()

Конец Попытки