2016-05-06 4 views
0

При записи в базу данных SQL я получаю «System.Web.UI.WebControls.TextBox», а не фактические данные.Запись данных в базу данных SQL из текстового поля ASP.NET

upload.aspx.cs файл (содержащий запрос):

string query = "INSERT INTO reports (birdname, location, details, image, spotteddata, uploaddata, typeofbird) VALUES ('"+birdnametext+"', 'mygarden', 'some details about how long you waited', ' " + img + "', '10th March 2014','" + dateNow + "', '2')"; 

upload.aspx (содержащий текстовое поле):

<header> Upload </header> 
<p> Please fill out the form below to put your item up for sale</p> 
<p> 
<span>Name of Bird: 
<asp:TextBox ID="birdnametext" runat="server"></asp:TextBox> </span> 
<br/> 
<asp:FileUpload ID="FileUpload1" runat="server" /> 
<br /> 
<asp:Image ID="Image1" runat="server" /> 
<br /> 
+0

исследования http://www.aspsnippets.com/Articles/Get- value-of-HTML-Input-TextBox-in-ASPNet-code-behind-using-C-and-VBNet.aspx – techspider

+1

Ваш код уязвим для SQL-инъекции. Используйте параметризованные запросы для aviod. –

+0

Я вижу, что все опубликованные ответы предполагают, что вы используете AddWithValue. Поскольку вы используете проход через запрос, этот подход может стать проблематичным. Вы бы хотели указать тип данных явно, потому что иногда это будет неправильно. http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ –

ответ

1

Вы должны использовать Text свойство TextBox в доступ к его содержимому:

... + birdnametext.Text + ... 

параметризация, не Concaten ation

Кроме того, при построении запросов вы не хотите использовать конкатенацию строк, так как это может сделать вас уязвимыми для таких вещей, как SQL Injection и плохой синтаксис. Лучше было бы использовать параметризацию, как показано ниже:

using(var connection = new SqlConnection("{your-connection-string}")) 
{ 
    // Notice the use of parameters 
    var query = "INSERT INTO reports (birdname, location, details, image, spotteddata, uploaddata, typeofbird) VALUES (@birdname, @location', @details, ' @uploadData, @someDate, @now, @x)"; 
    using(var command = new SqlCommand(query, connection)) 
    { 
      connection.Open(); 
      // Read the bytes of your image here and store in a byte[] 
      var imageData = File.ReadAllBytes(Image1.ImageUrl); 
      // Add your parameters 
      command.Parameters.AddWithValue("@birdName",birdnametext.Text); 
      command.Parameters.AddWithValue("@location","mygarden"); 
      command.Parameters.AddWithValue("@details","some details about how long you waited"); 
      command.Parameters.AddWithValue("@uploadData",imageData); 
      command.Parameters.AddWithValue("@someDate","10th March 2014"); 
      command.Parameters.AddWithValue("@now",DateTime.Now);   
      command.Parameters.AddWithValue("@x",2); 
      // Execute your query 
      command.ExecuteNonQuery(); 
    } 
} 
2

Их являются МАЕ вещи, которые вы делаете неправильно:

  1. Вы пытаетесь передать сам TextBox в базу данных, вам необходимо пройти вместо этого это текст. То есть ...'"+ birdnametext + "' ... должно быть ...'"+ birdnametext.Text + "' ...
  2. Вы открываете широкую дверь для injection с помощью текстовых запросов, вместо этого используйте параметризованные запросы.

Вы можете создать команду вроде следующего:

string query = "INSERT INTO reports(birdname, location) VALUES(@birdname, @location); 
SqlCommand cmd = new SqlCommand("query,con); 
cmd.Parameters.Add("@birdname", SqlDbType.VarChar).Value = birdnametext.Text; 
cmd.Parameters.Add("@location", SqlDbType.VarChar).Value = "mygarden"; 
// similarly you can add the rest of columns and parameters 
cmd.ExecuteNonQuery(); 
0

Изменение birdnametext к birdnametext.text в вашем SQL заявление

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