Добавление данных из таблицы SQL Server в текстовое поле при вводе данных в другое текстовое поле - PullRequest
0 голосов
/ 03 апреля 2019

Вот моя программа:

Program

Что я хочу сделать: когда я ввожу 1 в ProductID текстовое поле, я хочу, чтобы category, name и price для ProductID = 1 были заполнены в их текстовые поля.

Я попытался прочитать из таблицы продуктов, где ProductID = ProductIDTB.Text, а затем изменил другие текстовые поля, чтобы показать данные внутри других столбцов

Вот мой код, когда текстовое поле ProductID изменяется:

protected void ProductIDTB_TextChanged(object sender, EventArgs e)
{
        string connectionString1;
        SqlConnection cnn1;

        connectionString1 = "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Greenwich_Butchers;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
        cnn1 = new SqlConnection(connectionString1);

        string selectSql1 = "SELECT * FROM [Product] WHERE ProductID = ('" + Convert.ToInt32(ProductIDTB.Text) + "') ";

        SqlCommand com1 = new SqlCommand(selectSql1, cnn1);

        try
        {
            cnn1.Open();

            using (SqlDataReader read = com1.ExecuteReader())
            {
                while (read.Read())
                {
                    String productcategory = Convert.ToString(read["ProductCategory"]);
                    ProductCategoryTB.Text = productcategory;
                    String productname = Convert.ToString(read["ProductName"]);
                    ProductNameTB.Text = productname;
                    String productprice = Convert.ToString(read["ProductPrice"]);
                    ProdPriceTB.Text = productprice;
                }
            }
        }
        catch (Exception ex)
        {
            Response.Write("error" + ex.ToString());
        }
        finally
        {
            cnn1.Close();
        }
    }

Обходной путь: так как событие textbox_textchanged не работало, я решил добавить кнопку, которая находит продукт, используя идентификатор:

protected void FindProductBtn_Click(object sender, EventArgs e)
{
        string connectionString1;
        SqlConnection cnn1;

        connectionString1 = "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Greenwich_Butchers;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";

        cnn1 = new SqlConnection(connectionString1);

        string selectSql1 = "SELECT * FROM [Product] WHERE ProductID = (" + Convert.ToInt32(ProductIDTB.Text) + ") ";

        SqlCommand com1 = new SqlCommand(selectSql1, cnn1);

        try
        {
            cnn1.Open();

            using (SqlDataReader read = com1.ExecuteReader())
            {
                while (read.Read())
                {
                    String productcategory = Convert.ToString(read["ProductCategory"]);
                    ProductCategoryTB.Text = productcategory;
                    String productname = Convert.ToString(read["ProductName"]);
                    ProductNameTB.Text = productname;
                    String productprice = Convert.ToString(read["ProductPrice"]);
                    ProdPriceTB.Text = productprice;
                }
            }
        }
        catch (Exception ex)
        {
            Response.Write("error" + ex.ToString());
        }
        finally
        {
            cnn1.Close();
            ProductCategoryTB.ReadOnly = true;
            ProductNameTB.ReadOnly = true;
            ProdPriceTB.ReadOnly = true;
        }
    }

Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

Установите для атрибута AutoPostBack текстового поля значение true

Дополнительная информация: https://meeraacademy.com/textbox-autopostback-and-textchanged-event-asp-net/

<asp:TextBox ID="ProductIDTB" runat="server" AutoPostBack="True" 
OnTextChanged="ProductIDTB_TextChanged"></asp:TextBox>

Кстати, используйте SqlParameter для использования параметризованного запроса.Помимо предотвращения атак с использованием SQL-инъекций, параметризованный запрос может помочь СУБД сохранить и повторно использовать план выполнения аналогичных запросов, чтобы обеспечить более высокую производительность.Смотри: https://dba.stackexchange.com/questions/123978/can-sp-executesql-be-configured-used-by-default

string selectSql1 = "SELECT * FROM [Product] WHERE ProductID = @productIdFilter";

int productIdFilter = Convert.ToInt32(ProductIDTB.Text);

SqlCommand com1 = new SqlCommand(selectSql1, cnn1);
com1.Parameters.AddWithValue("productIdFilter", productIdFilter);
0 голосов
/ 03 апреля 2019

Событие OnTextChanged в коде позади

protected void txtProductId_TextChanged(object sender, EventArgs e) 
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["_connect"].ToString());

    int ProductId = Convert.ToInt32(txtProductId.Text);

    SqlCommand com = con.CreateCommand();
    com.CommandText = "sp_ProductGetData";
    com.CommandType = CommandType.StoredProcedure;

    com.Parameters.AddWithValue("@Mode", 1);
    com.Parameters.AddWithValue("@ProductId", ProductId);   

    con.Open();

    SqlDataReader dr = com.ExecuteReader();

    if (dr.HasRows)
    {
        dr.Read();
        txtProductCategory.Text = Convert.ToString(dr["ProductCategory"]);
        txtProductName.Text = Convert.ToString(dr["ProductName"]);
        txtPrice.Text = Convert.ToString(dr["Price"]);
    }  
    else
    {
        ScriptManager.RegisterClientScriptBlock((Page)(HttpContext.Current.Handler), typeof(Page), "alert", "javascript:alert('" + Convert.ToString(("No Record Found with Prodcut Id: "+ProductId)) + "');", true);
        return;
    }

    con.Close();
}

Хранимая процедура

CREATE PROCEDURE sp_ProductGetData
(
  @Mode INT=NULL,
  @ProductId INT=NULL   
)
AS
BEGIN   
  IF(@Mode=1)
  BEGIN
    SELECT ProductCategory,ProductName,Price FROM Product
    WHERE ProductId=@ProductId
  END       
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...