2013-12-09 4 views
0

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

В моем представлении слоя, выбирается, когда выпадающий элемент списка:

protected void ddlScheduleList_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string address = ddlScheduleList.SelectedItem.ToString(); 

     Distribution scheduledIndv = new Distribution(); 

     scheduledIndv = packBLL.getDistributionDetail(address); 

     if (scheduledIndv == null) 
     { 
      Console.Out.WriteLine("Null"); 
     } 
     else 
     { 
      tbScheduleDate.Text = scheduledIndv.packingDate.ToString(); 
      tbBeneficiary.Text = scheduledIndv.beneficiary; 
     } 

    } 

В моей бизнес-логики, я получаю выбранный адрес и передать его в слой доступа к данным:

public Distribution getDistributionDetail(string address) 
    { 
     Distribution scheduledIndv = new Distribution(); 

     return scheduledIndv.getDistributionDetail(address); 
    } 

На моем уровне доступа к данным я уже тестировал инструкцию SQL. Это дает мне то, что я хотел. Но он просто не появится на веб-странице.

public Distribution getDistributionDetail(string address) 
    { 
     Distribution distributionFound = null; 

     using (var connection = new SqlConnection(FoodBankDB.GetConnectionString())) // get your connection string from the other class here 
     { 
      SqlCommand command = new SqlCommand("SELECT d.packingDate, b.name FROM dbo.Distributions d " + 
      " INNER JOIN dbo.Beneficiaries b ON d.beneficiary = b.id " + 
      " WHERE b.addressLineOne = '" + address + "'", connection); 
      connection.Open(); 

      using (var dr = command.ExecuteReader()) 
      { 
       if (dr.Read()) 
       { 
        DateTime packingDate = DateTime.Parse(dr["packingDate"].ToString()); 
        string beneficiary = dr["beneficiary"].ToString(); 

        distributionFound = new Distribution(packingDate, beneficiary); 
       } 
      } 
     } 
     return distributionFound; 
    } 

И мой выполнить метод чтения в другом отделенном классе:

public static string connectionString = Properties.Settings.Default.connectionString; 

    public static string GetConnectionString() 
    { 
     return connectionString; 
    } 

public static SqlDataReader executeReader(string query) 
    { 
     SqlDataReader result = null; 

     System.Diagnostics.Debug.WriteLine("FoodBankDB executeReader: " + query); 

     SqlConnection connection = new SqlConnection(connectionString); 
     SqlCommand command = new SqlCommand(query, connection); 
     connection.Open(); 
     result = command.ExecuteReader(); 
     connection.Close(); 

     return result; 
    } 

Интересно, что пошло не так. Это о (! IsPostBack) или?

Заранее спасибо.

+0

Я считаю, что вам нужно, чтобы это отправлять назад, чтобы заселить его. Или привяжите его к базе данных. – Jmoreland91

+0

Я уже выяснил свою ошибку. Я забыл включить пост в раскрывающемся списке. Спасибо –

+2

У вас есть уязвимость в SQL-инъекции. – SLaks

ответ

1

Вы нашли свою ошибку, но, чтобы избежать SQL Injection, изменить код так:

SqlCommand command = new SqlCommand("SELECT d.packingDate, b.name FROM dbo.Distributions d " + 
       " INNER JOIN dbo.Beneficiaries b ON d.beneficiary = b.id " + 
       " WHERE b.addressLineOne = @address", connection); 

    command.Parameters.AddWithValue("@address", address); 
+0

Какое отрицательное влияние на инъекцию Sql? –

+0

С помощью SQL-инъекции злоумышленник может получить доступ ко всем вашим данным, хранящимся в базе данных SQL. И если SQL-сервер настроен неправильно, возможно выполнить произвольное выполнение кода. –

Смежные вопросы