Здравствуйте! Сегодня: Пн, 26 Окт 2020, Ваш IP: 54.236.35.159 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Web-программирование
+ Создать новую тему Страница: 1 · 2 · 3 · 4 · 5 · 6 · 7 · 8 · 9 · 10 · > · >> · [17]
Тема: Web · +  +    в избранномx2 дата добавления: 18.10.2013 / 20:29
Автор темы:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Как сделать форму регистрации а точнее сам функционал? на чем?
Технологии: ASP .NET, Visual Basic .NET
--
Du Main Du BA DU
 
Ответ # 81 # · +  +  дата добавления: 24.10.2013 / 19:26
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


<add name="Crash666" connectionString="Data Source=адрес sql-сервера;Initial Catalog=crash;user id=crash;password=пароль;" />
с этим вариантом тоже самое
--
Du Main Du BA DU
 
Ответ # 82 # · +  +  дата добавления: 24.10.2013 / 19:40
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Я тут заметил такую ошибку Ошибка Не удается открыть файл модуля
"C:\Windows\TEMP\.NETFramework,Version=v4.0.AssemblyAttributes.vb": Не удается найти указанный файл.
Кликаю 2 раза пишет определение объекта скрыто
Значит дело не в конфиге. Что-то поломал.

Попробуй

и запустить по новой (F5 или Ctrl + F5).
 
Ответ # 83 # · +  +  дата добавления: 24.10.2013 / 21:23
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Когда я перезапустил визу то ошибки не было но та строчка всё равно не даёт работать
--
Du Main Du BA DU
 
Ответ # 84 # · +  +  дата добавления: 24.10.2013 / 21:38
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Когда я перезапустил визу то ошибки не было но та строчка всё равно не даёт работать
Код в студию!
 
Ответ # 85 # · +  +  дата добавления: 24.10.2013 / 21:46
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Код конфига? или чего?
--
Du Main Du BA DU
 
Ответ # 86 # · +  +  дата добавления: 24.10.2013 / 22:01
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Конфига.
 
Ответ # 87 # · +  +  дата добавления: 25.10.2013 / 00:48
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Хотя я думаю, что конфиг тут не причем. Дело в чем-то другом.

Перезапуск студии и удаление компилированных файлов проекта - разные вещи. Может временные файлы нужно почистить... Или папку temp грохнуть или очистить.
 
Ответ # 88 # · +  +  дата добавления: 25.10.2013 / 07:38
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Вот код кофига
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <add name="Crash666" connectionString="Data Source=**********;Initial Catalog=crash;dbo.users id=crash;password=*******;" />
    <system.web>
        <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
    </system.web>
</configuration>
Также вот пара скринов...

Я кстати не замечал что эта строчка жалуется...
--
Du Main Du BA DU
 
Ответ # 89 # · +  +  дата добавления: 25.10.2013 / 11:50
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Конфиг неправильный.

Visual Studio же создает пустой web.config, в нем был блок connectionStrings, в который и нужно было вставлять информацию о строке соединения.

А так, ты делаешь add в секцию configuration, для которой add недопустим. Собственно, тебе об этом и говорят в сообщениях об ошибках.

web.config - важный файл, который определят работу всего сайта, а также отвечает за поведение веб-сервера (IIS).

Вот конфиг по умолчанию, со вставленной строкой соединения:
<?xml version="1.0"?>
<configuration>
  <appSettings/>
  <connectionStrings>
    <remove name="LocalSqlServer"/>
    <add name="LocalSqlServer" connectionString="Data Source=адрес sql-сервера;Initial Catalog=crash;user id=crash;password=пароль;"/>
  </connectionStrings>
  <system.web>
    <!-- 
            Параметры Visual Basic:
            Значение параметра Set strict="true" означает запрет любых преобразований типов данных, 
            при которых может произойти потеря данных. 
            Значение параметра Set explicit="true" означает, что обязательно требуется объявление всех переменных.
        -->
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    <!--
      Раздел <authentication> позволяет настроить параметры 
      режима проверки подлинности, используемого ASP.NET для проверки 
      подлинности пользователя, запрашивающего разрешение на доступ. 
    -->
    <authentication mode="Windows"/>
    <!--
       Раздел <customErrors> служит для настройки действий, 
            выполняемых при возникновении необрабатываемой 
            ошибки во время выполнения запроса. В частности, 
            разработчик может задать html-страницы ошибок 
            для отображения вместо трассировки ошибки в стеке.

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm"/>
            <error statusCode="404" redirect="FileNotFound.htm"/>
        </customErrors>
    -->
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
      <namespaces>
        <clear/>
        <add namespace="System"/>
        <add namespace="System.Collections"/>
        <add namespace="System.Collections.Generic"/>
        <add namespace="System.Collections.Specialized"/>
        <add namespace="System.Configuration"/>
        <add namespace="System.Text"/>
        <add namespace="System.Text.RegularExpressions"/>
        <add namespace="System.Linq"/>
        <add namespace="System.Xml.Linq"/>
        <add namespace="System.Web"/>
        <add namespace="System.Web.Caching"/>
        <add namespace="System.Web.SessionState"/>
        <add namespace="System.Web.Security"/>
        <add namespace="System.Web.Profile"/>
        <add namespace="System.Web.UI"/>
        <add namespace="System.Web.UI.WebControls"/>
        <add namespace="System.Web.UI.WebControls.WebParts"/>
        <add namespace="System.Web.UI.HtmlControls"/>
      </namespaces>
    </pages>
  </system.web>
  <!-- 
        Раздел system.webServer требуется для работы ASP.NET AJAX в
        Internet Information Services 7.0.  Этот раздел необязателен для предыдущей версии IIS.
    -->
</configuration>

Секция pages управляет страницами. Там можно указать практически все параметры, которые есть в директиве <%@Page%>, например: masterPageFile.
namespaces - важная ветка, импортирует пространства имен. Без этого вообще ничего не будет работать. В эту секцию, при необходимости, можно добавить нужные пространства имен, чтобы в коде постоянно не делать Imports или не писать полный путь к классам (типа: Dim DT As System.Data.DataTable, против Dim DT As DataTable).

Секция authentication определяет параметры авторизации. Тебе пока не нужна, но она тоже важная.

Секция compilation - определяет параметры компиляции проекта, и самое главное, включает режим отладки и детальной трассировки, что важно при разработке (для получения максимальной информации о возникающих ошибках).

Секция appSettings, она пустая, но тоже важная, в ней можно хранить настройки приложения.

В комментариях сказано про секцию customErrors, она важная при развертывании проекта на IIS, можно указать, будет ли пользователю отображаться вся информация об ошибках или нет. А также можно сделать пользовательские страницы об ошибках (пример этого тоже указан в комментариях).
 
Ответ # 90 # · +  +  дата добавления: 25.10.2013 / 21:33
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Код с кнопки регистрации
    Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim myConn As New SqlConnection(ConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString)
        myConn.Open()
        Dim myCmd As New SqlCommand()
        myCmd.Connection = myConn
        myCmd.CommandText = "Select user_name from dbo.users where user_name='" & TextBox1.Text & "' " 'Select user_name from dbo.users where user_name='" & TextBox1.Text & "'                  SELECT * FROM users
        Dim DA As New System.Data.SqlClient.SqlDataAdapter(myCmd) ' передаем адаптеру команду
        MsgBox(DA.ToString())
        myConn.Close()
    End Sub
--
Du Main Du BA DU
 
Ответ # 91 # · +  +  дата добавления: 25.10.2013 / 21:34
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Странно что комменты не выделились
--
Du Main Du BA DU
 
Ответ # 92 # · +  +  дата добавления: 25.10.2013 / 21:45
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Для проверки адаптер не нужен, будет достаточно ExecuteScalar.

Передавать текст напрямую в SQL-запрос очень ОЧЕНЬ ОЧЕНЬ ОПАСНО!

Любой более ли менее догадливый пользователь может получить доступ к базе, удалить что-нибудь, добавить что-нибудь свое. Последнее делается чаще, таким образом распространяются вирусы.

Параметры нужно передавать через SqlCommand, через коллекцию Paramters.

В тексте SQL-запрос параметры указывать в формате @имяПараметры.

Например:
myCmd.CommandText = "SELECT [user_name] FROM users WHERE [user_name] = @user_name"
myCmd.Parameters.Add("@user_name", SqlDbType.NVarchChar).Value = TextBox1.Text
В запросе [user_name] - в квадратных скобках, т.к., если не изменяет память, user_name - это ключевое слово SQL, скобки его экранируют, чтобы не было проблем.

@user_name - имя параметра, может быть любым, например:
myCmd.CommandText = "SELECT [user_name] FROM users WHERE [user_name] = @kakoeto_imya"
myCmd.Parameters.Add("@kakoeto_imya", SqlDbType.NVarchChar).Value = TextBox1.Text
но для удобства, лучше называть их как и поля, в которые они передаются.
Экранировать параметры подстановки не нужно, т.к. у них собака (@) есть.

Результат выполнения запроса можно получить через функцию ExecuteScalar, которая вернет DBNull.Value или Nothing, если ничего не будет найдено:
Dim result As Object = myCmd.ExecuteScalar()
If result = DBNull.Value OrElse result Is Nothing Then
'данные не найдены, т.е. в данном случае можно продолжать регистрацию
Else
'такой юзер уже есть, требуем выбрать другой логин
End If
 
Ответ # 93 # · +  +  дата добавления: 25.10.2013 / 21:46
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Как добавить в столбец название и какое нибудь значение?
--
Du Main Du BA DU
 
Ответ # 94 # · +  +  дата добавления: 25.10.2013 / 21:51
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Как добавить в столбец название и какое нибудь значение?
Для добавления данных используется инструкция INSERT INTO.

Значения в базу передаются через именованные параметры, точно также, как я показывал в примере с инструкцией SELECT:
myCmd.CommandText = "INSERT INTO users ([user_name], ip) VALUES (@user_name, @ip)"
myCmd.Parameters.Add("@user_name", SqlDbType.NVarchChar).Value = TextBox1.Text
myCmd.Parameters.Add("@ip", SqlDbType.VarchChar).Value = Request.UserHostAddress
Запрос можно выполнить методом ExecuteNonQuery, т.к. INSERT INTO не возвращает результат.
 
Ответ # 95 # · +  +  дата добавления: 25.10.2013 / 21:55
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


INSERT INTO users ([user_name]) VALUES (user1)
Сообщение 207, уровень 16, состояние 1, строка 1
Недопустимое имя столбца "user1".
--
Du Main Du BA DU
 
Ответ # 96 # · +  +  дата добавления: 25.10.2013 / 22:10
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Всё понял
INSERT INTO users ([user_name]) VALUES ('user1')
сюда ковычки нужны:)
--
Du Main Du BA DU
 
Ответ # 97 # · +  +  дата добавления: 25.10.2013 / 22:19
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Зачем? Данные ведь будут из текстовых полей, нужно указывать именованные параметры.
 
Ответ # 98 # · +  +  дата добавления: 25.10.2013 / 22:24
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Мне для проверки кода нужен был один юзер в базе:)
--
Du Main Du BA DU
 
Ответ # 99 # · +  +  дата добавления: 25.10.2013 / 22:39
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Вот смастерил код:)
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim result As Object
        Dim Email, log As Boolean
        Dim myConn As New SqlConnection(ConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString)
        myConn.Open()
        Dim myCmd As New SqlCommand()
        myCmd.Connection = myConn
        myCmd.CommandText = "SELECT users [user_name] FROM users WHERE [user_name] = @user_login"
        myCmd.Parameters.Add("@user_login", SqlDbType.NVarChar).Value = TextBox2.Text
        result = myCmd.ExecuteScalar()
        If result Is Nothing Then
            log = False
        Else
            log = True
        End If
        myCmd.CommandText = "SELECT users [user_name] FROM users WHERE [user_name] = @user_email"
        myCmd.Parameters.Add("@user_email", SqlDbType.NVarChar).Value = TextBox3.Text
        result = myCmd.ExecuteScalar()
        If result Is Nothing Then
            Email = False
        Else
            Email = True
        End If
        Page.Validate()
        If log = False And Email = False Then
            myCmd.CommandText = "INSERT INTO users ([user_name], email, [user_login], ip, [user_pass]) VALUES (@user_name, @email, @user_login, @ip, @user_pass)"
            myCmd.Parameters.Add("@user_name", SqlDbType.NVarChar).Value = TextBox1.Text
            myCmd.Parameters.Add("@user_login", SqlDbType.NVarChar).Value = TextBox2.Text
            myCmd.Parameters.Add("@email", SqlDbType.NVarChar).Value = TextBox3.Text
            myCmd.Parameters.Add("@user_pass", SqlDbType.NVarChar).Value = TextBox4.Text
            myCmd.Parameters.Add("@ip", SqlDbType.VarChar).Value = Request.UserHostAddress
        End If
        myConn.Close()
    End Sub
--
Du Main Du BA DU
 
Ответ # 100 # · +  +  дата добавления: 26.10.2013 / 11:30
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


SELECT users [user_name] FROM users WHERE [user_name] = @user_login
Запрос неправильный. Либо точку нужно поставить между именем таблицы и именем поля, либо убрать имя таблицы:
SELECT users.[user_name] FROM users WHERE [user_name] = @user_login
SELECT [user_name] FROM users WHERE [user_name] = @user_login

В целом, можно сделать один запрос.
myCmd.CommandText = "SELECT [user_name] FROM users WHERE [user_name] = @user_login OR email = @user_email"
myCmd.Parameters.Add("@user_login", SqlDbType.NVarChar).Value = TextBox2.Text 'лучше чтобы имена параметров соответствовали именам полей (@user_name, @email), а не как сейчас
myCmd.Parameters.Add("@user_email", SqlDbType.NVarChar).Value = TextBox3.Text
'result = myCmd.ExecuteScalar()
If myCmd.ExecuteScalar() Is Nothing Then
  log = False
Else
  log = True
End If
'log = myCmd.ExecuteScalar() IsNot Nothing 'так будет красивее, если понятна суть
Нужно стремиться делать меньше запросов к базе данных. Это примерно, как с электричеством. Втыкаешь вилку чайника в розетку (делаешь запрос к базе), счетчик начинает вертеться (в базе тоже есть счетчик активных запросов), деньги утекают (съедаются ресурсы сервера: оперативка, нагрузка идет на жесткий диск и процессор). Если воткнешь еще несколько чайников в туже розетку, то может выбить автомат от перегрузки. В базе аналогично, если много активных запросов, то база может вырубиться на время, или отказаться принимать новые запросы. Нужно учитывать, что пользователей будет больше одно и для каждого будут делать отдельные запросы. Если у тебя в коде делается два запроса, то для десяти пользователей - это уже будет 20 запросов, а для 1 000 пользователей - 2 000 запросов. Хотя, на странице регистрации это не так критично, ей редко будут пользоваться, а еще реже одновременно множество пользователей, но все равно, лучше на уровне рефлексов стремиться делать оптимизированный код. При желании (да и в идеале), механизм проверки уникальности пользователя и добавление нового пользователя можно сделать вообще одним запросом, в хранимой процедуре, но пока делай в классическом стиле, как делаешь (запросы в vb-коде), это проще.
Page.Validate
Бессмысленно требовать проверку от валидаторов, после отправки запроса в базу. Это все равно что нанимать охранника, после ограбления, когда охранять уже нечего.

Проверку нужно делать в начале метода, как я показывал.
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  If Page.IsValid = False Then Return
  'If Not Page.IsValid Then Return 'тоже что и выше: выполнить условие если Page.IsValid не равен True, т.е. Not True = (False = False) = True
  '...остальной код...
End Sub
myCmd.CommandText = "INSERT INTO users ([user_name], email, [user_login], ip, [user_pass]) VALUES (@user_name, @email, @user_login, @ip, @user_pass)"
myCmd.Parameters.Add("@user_name", SqlDbType.NVarChar).Value = TextBox1.Text
myCmd.Parameters.Add("@user_login", SqlDbType.NVarChar).Value = TextBox2.Text
...
Параметр @user_login уже есть в коллекции, произойдет ошибка. Один параметр можно добавлять только один раз.
Если нужно, его можно поменять:
myCmd.Parameters("@user_login").Value = TextBox2.Text
но в данном случае, нет смысла менять, можно просто не указывать его повторно, либо удалить все параметры перед добавлением:
myCmd.Parameters.Clear()
либо создать новый SqlCommand, чаще так и делается, т.к. это проще всего:
myCmd = New SqlCommand() 'создаем новый SqlCommand, старый полностью удаляется из памяти
myCmd.Connection = myConn
myCmd.CommandText = "INSERT INTO users ([user_name], email, [user_login], ip, [user_pass]) VALUES (@user_name, @email, @user_login, @ip, @user_pass)"
'и т.д.
 
Страница: 1 · 2 · 3 · 4 · 5 · 6 · 7 · 8 · 9 · 10 · > · >> · [17] + Создать новую тему