Member 14083059 Ответов: 3

Как решить это-свойство connectionString не инициализировано.


Я пытаюсь ввести код для входа в систему asp.net веб-анкета. использование базы данных sql.
я получаю сообщение об ошибке: "свойство ConnectionString не было инициализировано."
Здесь я получаю расширение диалогового окна ошибки-
con = new SqlConnection(str);
           con.Open();
           str = "Select count(*) from admin where UserName='" + (TextBox1.Text) + "'
            and Password='" + (TextBox2.Text) + "' ";
           cmd = new SqlCommand(str, con);
           int temp = Convert.ToInt32(cmd.ExecuteScalar().ToString());
           SqlDataReader sdr = cmd.ExecuteReader();


указатель ошибки показывает здесь-"con.open();"

А мой файл web.config-<?xml version="1.0"?>

<!--
Для получения дополнительной информации о том, как настроить ваш ASP.NET заявка, пожалуйста, посетите
http://go.microsoft.com/fwlink/?LinkId=169433
-->

<конфигурация>
<соединительные нити>
&ЛТ;добавить имя="NoveltySystemConnectionString" свойства connectionString="источник данных=домашний ПК\именем sqlexpress;начальный каталог=NoveltySystem;Комплексная безопасность=true;в зачет=ложь" имя_поставщика="системы.Данных.В sqlclient"/&ГТ;
</соединительные нити>
&ЛТ;система.веб&ГТ;
<compilation debug="true" targetFramework="4.5" />
</system.web>

</конфигурация>


Пожалуйста, кто-нибудь, помогите мне быстро..Спасибо

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data.Sql;
using System.Configuration;
using System.Data;

namespace NovletyShop
{
    public partial class Login : System.Web.UI.Page
    {
        String str;
        SqlConnection con;
        SqlCommand cmd;
        
       
        protected void Page_Load(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection();
            var constring = ConfigurationManager.ConnectionStrings["NoveltySystemConnectionString"].ConnectionString;
           
            
        }

        protected void loginB_Click(object sender, EventArgs e)
        {

            con = new SqlConnection(str);
            con.Open();
            str = "Select count(*) from admin where UserName='" + (TextBox1.Text) + "' and Password='" + (TextBox2.Text) + "' ";
            cmd = new SqlCommand(str, con);
            int temp = Convert.ToInt32(cmd.ExecuteScalar().ToString());
            SqlDataReader sdr = cmd.ExecuteReader();
           
            con.Close();
            if (sdr.Read()) 
            {
                Session["User"] = TextBox1.Text;
                Response.Redirect("AdBooks.aspx");
            }
            else
            {
                Response.Write("<script>alert('Somting Wrong..');</script>");

            }
        }
    }
}

3 Ответов

Рейтинг:
2

Dipesh Bagdi

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

partial class Login : System.Web.UI.Page
    {
        String str;
        SqlConnection con;
        SqlCommand cmd;        
       
        protected void Page_Load(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection();
            str = ConfigurationManager.ConnectionStrings["NoveltySystemConnectionString"].ConnectionString;
}
protected void loginB_Click(object sender, EventArgs e)
        {

            con = new SqlConnection(str);
            con.Open();            
        }
    }


Рейтинг:
1

OriginalGriff

Проверьте фактическую строку в отладчике: поставьте точку останова в строке

con = new SqlConnection(str);
и посмотрите на что именно str содержит. На первый взгляд, это так null или пустая строка, потому что код чтения строки подключения не был выполнен, или web.config-это не то, что вы думаете.
В любом случае, мы не можем проверить для вас - он должен работать с вашим кодом, чтобы посмотреть, что происходит, и мы не можем сделать это для вас - что означает отладчик!

Но не делайте свой код таким образом (особенно в веб-системе!)
Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

И никогда не храните пароли в открытом виде - это серьезная угроза безопасности. Здесь есть некоторая информация о том, как это сделать: Хранение паролей: как это сделать.[^]


Member 14083059

Спасибо, сэр, что дали свой ответ @OriginalGriff

OriginalGriff

Всегда пожалуйста!

Member 14083059

но мою ошибку не решить

Member 14083059

но мою ошибку не решить

OriginalGriff

Это потому что ты не читал то что я сказал:

"В любом случае, мы не можем проверить для вас - он нуждается в вашем коде работает, чтобы посмотреть, что происходит, и мы не можем сделать это для вас - что означает отладчик!"

Поэтому используйте отладчик и узнайте, что находится в строке. Когда вы это знаете, вы можете начать искать, почему это так, но пока вы этого не сделаете, вы не знаете ничего, кроме "что - то не получилось".
Для устранения подобной проблемы необходимо, чтобы ваш код был запущен; без этого он не может быть исправлен. И мы не можем запустить ваш код: у нас нет большей его части, у нас нет доступа к вашей БД или даже к вашему серверу БД!
Поэтому вам нужно сделать "ослиную работу" - собрать информацию и начать работать над тем, почему это так!

Рейтинг:
0

F-ES Sitecore

В случае загрузки вы помещаете соединительную строку в "constring", но при ее открытии используете "str", то есть строковую переменную, в которую вы еще ничего не вставляли. Кроме того, вы определяете ограничение в событии загрузки, чтобы оно не было доступно вне этого события. Измените код на

namespace NovletyShop
{
    public partial class Login : System.Web.UI.Page
    {
        String str;
        String constring;
        SqlConnection con;
        SqlCommand cmd;
        
       
        protected void Page_Load(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection();
            constring = ConfigurationManager.ConnectionStrings["NoveltySystemConnectionString"].ConnectionString;
           
            
        }

        protected void loginB_Click(object sender, EventArgs e)
        {

            con = new SqlConnection(constring);