Вставка данных в базу данных SQL на ASP.net

Я работаю с ASP.NET и использую C# для создания проекта веб-сайта. У меня проблема с подключением к базе данных (вставка) / базе данных SQL при создании формы регистрации и входа.

Я привожу свой код ниже:

Форма регистрации:

<div id = "Sign_Up_Form" style = "display: none">
    <form class = "modal-content animate" method = "post" action = "">           
        <div class = "input">
                <div>
                    <div>Name</div>
                    <asp:TextBox CssClass = "signUp_input" ID = "First_Name" runat = "server" placeholder = "First Name" style = "height: 20px; padding-left: 1px;"></asp:TextBox>
                    <asp:TextBox CssClass = "signUp_input" ID = "Last_Name" runat = "server" placeholder = "Last Name" style = "height: 20px; padding-left: 1px;"></asp:TextBox>
                </div>
                <div>
                    <div>Email</div>
                    <asp:TextBox CssClass = "signUp_input" ID = "Regi_Email" runat = "server" placeholder = "Your email here"  style = "height: 20px;  width: 70%; padding-left: 1px;"></asp:TextBox>
                </div>
                <div>
                    <div>Password</div>
                    <asp:TextBox CssClass = "signUp_input" ID = "Regi_Password" type = "password" runat = "server" placeholder = "**********" style = "height: 20px;  width: 70%; padding-left: 1px;"></asp:TextBox>
                </div>
                <div>
                    <div>Confirm Password</div>
                    <asp:TextBox CssClass = "signUp_input" ID = "Confirm_Regi_Password" type = "password" runat = "server" placeholder = "**********" style = "height: 20px;  width: 70%; padding-left: 1px;"></asp:TextBox>
                </div>
                <div>
                    <div>Age</div>
                    <asp:TextBox CssClass = "signUp_input" ID = "Age" type = "number" runat = "server" placeholder = "e.g. 21" style = "height: 20px;  width: 70%; padding-left: 1px;"></asp:TextBox>
                </div>
                <div>
                    <div>Gender:</div>
                    <asp:RadioButtonList CssClass = "radio" ID = "Gender" runat = "server">
                        <asp:ListItem Value = "1">Male</asp:ListItem>
                        <asp:ListItem Value = "2">Female</asp:ListItem>
                        <asp:ListItem Value = "3">Other</asp:ListItem>
                    </asp:RadioButtonList>
                    </br>
                </div>
           </div>
        <asp:Button ID = "Register_Button" runat = "server" value = "Join" OnClick = "userRegister" CssClass = "button_join" Text = "Join" />
    </form>

Я не уверен, следует ли мне указывать метод публикации здесь, в тегах формы.

Метод userRegister (отредактированный после того, как я получил предложения):

  protected void userRegister(object sender, EventArgs e)
   {
    string constr = ConfigurationManager.ConnectionStrings["Khulna_website"].ConnectionString;
    SqlConnection con = new SqlConnection(constr);
     con.Open();

     string insertQuery = "insert into dbo.users(user_f_name,user_l_name,user_password,user_email,user_age, user_gender) values (@First_Name, @Last_Name, @Regi_Password, @Regi_Email, @Age, @Gender);";

     SqlCommand com = con.CreateCommand();

     com.CommandText= insertQuery;
     com.Parameters.AddWithValue("@First_Name", First_Name.Text);
     com.Parameters.AddWithValue("@Last_Name", Last_Name.Text);
     com.Parameters.AddWithValue("@Regi_Password", Regi_Password.Text);
     com.Parameters.AddWithValue("@Regi_Email", Regi_Email.Text);
     com.Parameters.AddWithValue("@Age", Age.Text);
     com.Parameters.AddWithValue("@Gender", First_Name.Text);


     com.ExecuteNonQuery();
     con.Close();

     Response.Write("Registration is Successful!");     
}

Код моей таблицы базы данных:

CREATE TABLE [dbo].[users] (
[user_id]         INT           IDENTITY (1, 1) NOT NULL,
[user_f_name]     VARCHAR (15)  NOT NULL,
[user_l_name]     VARCHAR (15)  NOT NULL,
[user_password]   VARCHAR (20)  NOT NULL,
[user_email]      VARCHAR (30)  NOT NULL,
[user_age]        INT           NOT NULL,
[user_gender]     INT           NOT NULL,
[user_profession] VARCHAR (20)  NULL,
[user_about]      VARCHAR (200) NULL,
PRIMARY KEY CLUSTERED ([user_email] ASC)
);

Факт №1 Я создал базу данных с добавлением нового элемента-> База данных SQL. Он создается под AppData. Затем я снова вставил строку подключения в файл Web.config. Когда я заполняю форму и отправляю ее, я вижу, что зеленый цвет соединения рядом с моей базой данных (с именем dabase.mdf) исчез, а он красный, и мне нужно обновить его, чтобы он снова стал зеленым.

Факт №2 Я попытался написать код response.write () в самом начале в самом начале. Но изменений не было.

Проблема: данные не вставляются. Причина в каком-либо из фактов? Или здесь есть какая-то другая проблема, которую я упускаю?

P.S. Я совершенно новичок в этой теме, и любая помощь приветствуется.

edit: На самом деле у меня есть одна проблема с двумя фактами ... Я узнал факты, когда пытался увидеть корень проблемы.

Обратите внимание, что при переполнении стека вы должны задавать только один вопрос для каждого вопроса. Тот, кто знает ответ на одну часть, может не знать ответа на другую. Тогда они могут не ответить или не получить должного за свое время и хлопоты за то, что они действительно отвечают. Вы можете использовать ссылку редактировать, чтобы исправить свой вопрос, чтобы это была только одна тема и была ясна. Вы можете задать второй вопрос для другой вашей проблемы.

Cindy Meister 21.04.2018 13:38

Вы не выполняете созданную команду sql.

TZHX 21.04.2018 13:46

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

JigJagJoe 21.04.2018 13:47

@TZHX Внутри метода? Я знал только так. Должен ли я выполнить это явно снова? Или это проблема, которую я не совершал?

JigJagJoe 21.04.2018 13:48

Вам нужно что-то вроде com.ExecuteNonQuery() в конце метода, чтобы фактически отправить команду в базу данных.

TZHX 21.04.2018 13:51

Я только что добавил .. Все еще не работает.

JigJagJoe 21.04.2018 13:53

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

Crowcoder 21.04.2018 14:09

Я не понял .. Как я уже сказал, я новичок в этом. Вы хотите сказать, что у меня будет исключение и я должен добавить блок try / catch? Как назначить соединение команде?

JigJagJoe 21.04.2018 14:12

я должен использовать using ()?

JigJagJoe 21.04.2018 14:12

Да, вы должны избавиться от ресурсов, но код дает сбой не из-за этого. Мне нравится использовать этот синтаксис (это не единственный способ) SqlCommand com = con.CreateCommand();, а затем установить свойство CommandText команды.

Crowcoder 21.04.2018 14:14

Вы должны использовать блоки вокруг ваших объектов IDisposable, но это не причина вашей проблемы. Проблема в том, что вы не назначили соединение команде. Проверьте другие перегрузки конструктора SqlCommand, некоторые из них принимают SqlConnection в качестве параметра. Воспользуйтесь одним из них. Вы также должны выяснить, почему вы на самом деле не видели исключения.

mason 21.04.2018 14:14

@JigJagJoe, если вы хотите, чтобы кто-то знал, что вы с ним разговариваете, вы должны обращаться к ним с именем пользователя @ +.

Crowcoder 21.04.2018 14:15

@Crowcoder Хорошо, я пойду. И здесь ли текст типа команды? Я не использую здесь хранимую процедуру.

JigJagJoe 21.04.2018 14:23

@mason Я изменил его и использовал using .. Я все еще не получаю блок исключений, и данные еще не вставлены

JigJagJoe 21.04.2018 14:27

Я отредактировал соответствующим образом и отредактировал отредактированный код в фактическом сообщении

JigJagJoe 21.04.2018 14:27

@JigJagJoe CommandType - это Text по умолчанию. Привыкайте к чтение документации, чтобы увидеть, какие свойства и методы доступны.

Crowcoder 21.04.2018 14:30

@JigJagJoe Имена параметров чувствительны к регистру. First_name отличается от First_Name. Опять должно быть исключение.

Crowcoder 21.04.2018 14:33

@Crowcoder Спасибо, документацию прочитал, процедура мне понятнее. И я добавил это соответственно. Хотя до сих пор не работает. Я не понимаю объекты IDisposable. Я погуглил, и, насколько я понял, это для неуправляемых ресурсов. Но меня все это смущает.

JigJagJoe 21.04.2018 15:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
18
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В web.config ваша строка подключения должна быть примерно такой:

<connectionStrings>
    <add name = "Khulna_website" connectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|Database1.mdf;Integrated Security=True"/>
</connectionStrings>

Веб-форма:

<form id = "form1" runat = "server">
    <div class = "input">
        <div>
            <div>Name</div>
            <asp:TextBox CssClass = "signUp_input" ID = "First_Name" runat = "server" placeholder = "First Name" Style = "height: 20px; padding-left: 1px;"></asp:TextBox>
            <asp:TextBox CssClass = "signUp_input" ID = "Last_Name" runat = "server" placeholder = "Last Name" Style = "height: 20px; padding-left: 1px;"></asp:TextBox>
        </div>
        <div>
            <div>Email</div>
            <asp:TextBox CssClass = "signUp_input" ID = "Regi_Email" runat = "server" placeholder = "Your email here" Style = "height: 20px; width: 70%; padding-left: 1px;"></asp:TextBox>
        </div>
        <div>
            <div>Password</div>
            <asp:TextBox CssClass = "signUp_input" ID = "Regi_Password" type = "password" runat = "server" placeholder = "**********" Style = "height: 20px; width: 70%; padding-left: 1px;"></asp:TextBox>
        </div>
        <div>
            <div>Confirm Password</div>
            <asp:TextBox CssClass = "signUp_input" ID = "Confirm_Regi_Password" type = "password" runat = "server" placeholder = "**********" Style = "height: 20px; width: 70%; padding-left: 1px;"></asp:TextBox>
        </div>
        <div>
            <div>Age</div>
            <asp:TextBox CssClass = "signUp_input" ID = "Age" type = "number" runat = "server" placeholder = "e.g. 21" Style = "height: 20px; width: 70%; padding-left: 1px;"></asp:TextBox>
        </div>
        <div>
            <div>Gender:</div>
            <asp:RadioButtonList CssClass = "radio" ID = "Gender" runat = "server">
                <asp:ListItem Value = "1">Male</asp:ListItem>
                <asp:ListItem Value = "2">Female</asp:ListItem>
                <asp:ListItem Value = "3">Other</asp:ListItem>
            </asp:RadioButtonList>
            <br/>
        </div>
    </div>
    <asp:Button ID = "Register_Button" runat = "server" value = "Join" OnClick = "userRegister" CssClass = "button_join" Text = "Join" />
</form>

Код программной части:

protected void userRegister(object sender, EventArgs e)
{
    string constr = ConfigurationManager.ConnectionStrings["Khulna_website"].ConnectionString;
    using (SqlConnection connection = new SqlConnection(constr))
    {
        string insertQuery = "insert into dbo.users(user_f_name,user_l_name,user_password,user_email,user_age, user_gender) values (@First_Name, @Last_Name, @Regi_Password, @Regi_Email, @Age, @Gender);";

        SqlCommand com = new SqlCommand(insertQuery, connection);

        connection.Open();

        com.Parameters.AddWithValue("@First_Name", First_Name.Text);
        com.Parameters.AddWithValue("@Last_Name", Last_Name.Text);
        com.Parameters.AddWithValue("@Regi_Password", Regi_Password.Text);
        com.Parameters.AddWithValue("@Regi_Email", Regi_Email.Text);
        com.Parameters.AddWithValue("@Age", Age.Text);
        com.Parameters.AddWithValue("@Gender", Gender.SelectedValue);

        com.ExecuteNonQuery();
    }            
}

Он должен работать.

мой файл web.config - <connectionStrings> <add name = "Khulna_website" connectionString = "Server = (localDB) \\ v11.0; Integrated Security = SSPI; Database = Database.mdf;" providerName = "System.Data.SqlClient" /> </connectionStrings>

JigJagJoe 21.04.2018 17:07

Если я дам runat: server в форме, он говорит, что он не может запускать runat в той же форме

JigJagJoe 21.04.2018 17:10

Я даже сомневаюсь, что он вообще входит в метод. Если бы это было так, по крайней мере, он ответил бы "Регистрация прошла успешно".

JigJagJoe 21.04.2018 17:18

@JigJagJoe Замените "Database = Database.mdf" на "AttachDBFilename = | DataDirectory | \ Database.mdf" в строке подключения (без кавычек). Пожалуйста, добавьте новую веб-форму в свой проект, скопируйте и вставьте код из моего ответа. Запустите, а затем откройте таблицу базы данных, чтобы убедиться, что данные были вставлены. Если все работает нормально, вернитесь к исходной WebForm и убедитесь, что у вас есть только один тег формы с «runat = server» и у вас есть код, который я предоставил в обработчике события кнопки «userRegister». Делайте ОДИН шаг за раз, чтобы исключить ошибки.

dpant 21.04.2018 17:30

Я должен изменить прикрепить db имя файла написать? database1 будет базой данных, это то, что я знаю, следует ли мне также изменить каталог данных?

JigJagJoe 21.04.2018 17:31

@JigJagJoe Если имя файла .mdf в папке App_Data - «database1.mdf», тогда ваша строка подключения localdb должна содержать: «AttachDBFilename = | DataDirectory | database1.mdf». | DataDirectory | - это специальный синтаксис, указывающий на папку App_Data вашего проекта.

dpant 21.04.2018 17:33

Я не знаю, что происходит ... Это дает следующую ошибку: CS1061: «ASP.default2_aspx» не содержит определения для «userRegister», и метод расширения «userRegister», принимающий первый аргумент типа «ASP.default2_aspx», может быть найдено (вам не хватает директивы using или ссылки на сборку?)

JigJagJoe 21.04.2018 17:41

@JigJagJoe убедитесь, что имя события По щелчку в веб-форме совпадает с именем метода обработчика событий в коде.

dpant 21.04.2018 17:51

Я сделал, теперь проблема в com.Parameters.AddWithValue ("@ First_Name", First_Name.Text); com.Parameters.AddWithValue ("@ Last_Name", Last_Name.Text); com.Parameters.AddWithValue ("@ Regi_Password", Regi_Password.Text); com.Parameters.AddWithValue ("@ Regi_Email", Regi_Email.Text); com.Parameters.AddWithValue ("@ Возраст", Age.Text); com.Parameters.AddWithValue ("@ Gender", Gender.SelectedValue); ...

JigJagJoe 21.04.2018 17:52

может дело в самом софте ошибка?

JigJagJoe 21.04.2018 17:53

@JigJagJoe Пожалуйста, уточняйте ошибки и сообщения об ошибках. По крайней мере, сообщите точное сообщение об ошибке.

dpant 21.04.2018 17:54

Наконец, я смог запустить его, и он сказал: «Произошла ошибка, связанная с сетью или конкретным экземпляром, при установлении соединения с SQL Server. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра правильное и что SQL Server настроен на разрешение удаленных подключений. (поставщик: Сетевые интерфейсы SQL, ошибка: 50 - Произошла ошибка времени выполнения локальной базы данных. Указанный экземпляр LocalDB не существует.)

JigJagJoe 21.04.2018 18:05

@JigJagJoe Проверьте, какие экземпляры localdb существуют в вашей системе, открыв командную строку и введя команду sqllocaldb я. Затем проверьте, какой экземпляр запущен, введя команду sqllocaldb я v11.0 или sqllocaldb и MSSQLLocalDB.

dpant 21.04.2018 18:10

Имя экземпляра канала: np: \\. \ Pipe \ LOCALDB # B83F9492 \ tsql \ query. Вы спрашиваете эту информацию?

JigJagJoe 21.04.2018 18:14

@JigJagJoe, это название канала. каково имя экземпляра (см. первую строку)?

dpant 21.04.2018 18:20

Имя: v11.0 Версия: 11.0.2100.60 Общее имя: Автосоздание: Да Состояние: Выполняется Время последнего запуска: 21 апреля 18 22:10:02 Имя экземпляра канала: np: \\. \ Pipe \ LOCALDB # B83F9492 \ tsql \ запрос

JigJagJoe 21.04.2018 18:21

@JigJagJoe Верно. В зависимости от вашей строки подключения он должен работать. Я считаю, что это будет, когда вы исправите проблему с подключением. Пожалуйста, прочтите: docs.microsoft.com/en-us/sql/database-engine/configure-windo‌ ws /…

dpant 21.04.2018 18:27

@JigJagJoe Почему бы вам не изменить строку подключения с AttachDBFilename = ... на База данных = ... (как было изначально) и не попробовать? Возможно, мое предложение строки подключения не подходит для вашей настройки (какая версия Visual Studio у вас установлена?)

dpant 21.04.2018 18:31

Думаю, проблема была в том, что когда я изменил строку подключения, я все изменил. То есть я изменил (localdb) v11.0 на (localdb) MSSqlLocalDB ... теперь взял исходный. Это чувствительно к регистру, что это должно быть localdb, но я дал LocalDB .. Изменить это сложно для свойств

JigJagJoe 21.04.2018 18:37

@JigJagJoe Ваш экземпляр localdb - v11.0, а не MSSQLLocalDB. Как только у вас будет правильная строка подключения, все остальное, несомненно, будет работать. Это все, ребята.

dpant 21.04.2018 18:42

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

JigJagJoe 21.04.2018 18:47

Это работает .. проблема была: это будет (LocalDB not localDB): D

JigJagJoe 22.04.2018 13:10

Другие вопросы по теме