Вставить данные SQL в таблицу в ASP.Net Web Application через текстовое поле - PullRequest
0 голосов
/ 18 октября 2018
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;


namespace todoassignment1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Visible = false;  
        }

        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            string valueUser = txtUsername.Text;

            SqlConnection db = new SqlConnection(SqlDataSource1.ConnectionString);

            SqlCommand cmd = new SqlCommand();

            cmd.CommandType = CommandType.Text;

            //User is the name of the table, UserName is the column 
            cmd.CommandText = "INSERT User (UserName) VALUES ('" + valueUser + "')";

            cmd.Connection = db;

            db.Open();

            try
            {
                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                Label1.Text = "Success writing into database!";
                Label1.Visible = true;  
            }
            catch (Exception ex)
            {
                Label1.Text = "Error writing into database.";
                Console.WriteLine(ex.Message);
                Label1.Visible = true;
            }
            finally
            {
                db.Close();
            }
        }
    }
}

Я добавил SqlDataSource1 на странице Default.aspx, что, кажется, было сделано успешно, так как я вижу имена столбцов таблицы User в виде сетки.Таблица пуста, и все, что я пытаюсь сделать, это взять ввод в текстовое поле и отправить его в столбец UserName.Я не очень хорош в отладке, но я заметил несколько ошибок, которые я потратил на изучение часов.Вещи, которые я пробовал:

  • SQL SMS> инструменты> параметры> конструкторы> ПРОВЕРЬТЕ сохранение изменений, которые требуют пересоздания таблицы
  • Добавлено с использованием System.Data;
  • Добавлен cmd.Connection.Open ();
  • Добавлено исключение, которое должно быть перехвачено в операторе catch
  • Воссоздание всей базы данных
  • Четвертая проверка правильности таких вещей, как txtUsernameID текстового поля
  • Переконфигурировать SqlDataSource1 снова и снова, удалить и воссоздать
  • Подтвердить, что connectionString в web.config является верным
  • Создать новый SQLConnection с точной строкойв web.config

        SqlConnection db = new SqlConnection("Data Source=NAME-PC\\SQLEXPRESS;Initial Catalog=Assignment;Integrated Security=True");
    
  • Изменена строка вставки с конкатенации на просто "INSERT User (UserName) VALUES ('asdf')" для упрощения кода, все еще не работает.

  • Пробовал другой синтаксис

        cmd.CommandText = "INSERT INTO User (UserName) VALUES (@username)";
    
        cmd.Parameters.Add("@username", SqlDbType.NVarChar, 50);
    
        cmd.Parameters["@username"].Value = txtUsername.Text.ToString();
    

Подсказки от отладчика:

  • видел несколько "System.InvalidCastExceptionsпри копании через cmd в авто
  • errorCS0103: имя 'ExecuteNonQuery' не существует в текущем контексте

  • Всегда видеть System.InvalidOperationException после выполнения

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 18 октября 2018
static void BtnSubmit_Click(object sender, EventArgs e)
{
    string valueUser = "test"; //txtUsername.Text;
    using (SqlConnection db = new SqlConnection("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=test;Integrated Security=True"))//SqlDataSource1.ConnectionString);
    {
        SqlCommand cmd = new SqlCommand("INSERT INTO dbo.[User] (UserName) VALUES (@valueUser)", db);
        cmd.Parameters.Add("@valueUser", SqlDbType.VarChar, 50).Value = valueUser;
        //cmd.CommandType = CommandType.Text;

        //User is the name of the table, UserName is the column 
        //cmd.CommandText = "INSERT User (UserName) VALUES (@valueUser)";

        //cmd.Connection = db;

        db.Open();

        try
        {
            //cmd.Connection.Open();
            cmd.ExecuteNonQuery();
            /*Label1.Text =*/
            Console.WriteLine("Success writing into database!");
            //Label1.Visible = true;
        }
        catch (Exception ex)
        {
            /*Label1.Text =*/
            Console.WriteLine("Error writing into database.");
            Console.WriteLine(ex.Message);
            //Label1.Visible = true;
        }
        //finally
        //{
            //db.Close();
        //}
    }
}

Пара проблем.

  1. Синтаксис для вставки: INSERT INTO TABLE (COLUMNS) VALUES (VALUES) У вас было "INSERT User (UserName)" ...
  2. USER isзарезервированное слово в SQL.Если вы настаиваете на использовании его в качестве имени таблицы, оно должно быть заключено в квадратные скобки.
  3. Вы открывали соединение дважды.Само по себе не проблема, но не нужна.
  4. Всегда, всегда, всегда используйте параметры.
  5. Я немного упростил вещи.

Если вы изменитеметод, который я прикрепил, вы сможете скопировать и вставить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...