2016-08-22 4 views
-1
protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!this.IsPostBack) 
     { 
      if (Request.InputStream.Length > 0) 
      { 
       using (StreamReader reader = new StreamReader(Request.InputStream)) 
       { 
        string hexString = Server.UrlEncode(reader.ReadToEnd()); 
        string imageName = DateTime.Now.ToString("dd-MM-yy hh-mm-ss"); 
        string imagePath = string.Format("~/losefound/{0}.png", imageName); 
        string ItemName = txtItemName.Text; 
        string Place = txtPlace.Text; 
        byte[] bytes = ConvertHexToBytes(hexString); 
        File.WriteAllBytes(Server.MapPath(imagePath), bytes); 
        string VisitorManagementConnectionString = ConfigurationManager.ConnectionStrings["VisitorManagementConnectionString"].ConnectionString; 
        using (SqlConnection con = new SqlConnection(VisitorManagementConnectionString)) 
        { 
         string query = "INSERT INTO LostFound (ItemName, FoundAt, TimeIn, ImageName, ContentType, Data) VALUES(@ItemName, @FoundAt, @TimeIn, @ImageName, @ContentType, @Data);SELECT SCOPE_IDENTITY()"; 
         using (SqlCommand cmd = new SqlCommand(query)) 
         { 
          cmd.Connection = con; 
          cmd.Parameters.AddWithValue("@ItemName", ItemName); 
          cmd.Parameters.AddWithValue("@FoundAt", Place); 
          cmd.Parameters.AddWithValue("@TimeIn", DateTime.Now); 
          cmd.Parameters.AddWithValue("@ImageName", imageName); 
          cmd.Parameters.AddWithValue("@ContentType", "image/png"); 
          cmd.Parameters.AddWithValue("@Data", bytes); 
          con.Open(); 

          Session["CapturedImageId"] = cmd.ExecuteScalar(); 

          con.Close(); 

         } 
        } 
       } 
      } 
     } 
    } 

    private static byte[] ConvertHexToBytes(string hex) 
    { 
     byte[] bytes = new byte[hex.Length/2]; 
     for (int i = 0; i < hex.Length; i += 2) 
     { 
      bytes[i/2] = Convert.ToByte(hex.Substring(i, 2), 16); 
     } 
     return bytes; 
    } 

    [WebMethod(EnableSession = true)] 
    public static string GetCapturedImage() 
    { 
     string url = string.Empty; 
     int imageId = Convert.ToInt32(HttpContext.Current.Session["CapturedImageId"]); 
     string VisitorManagementConnectionString = ConfigurationManager.ConnectionStrings["VisitorManagementConnectionString"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(VisitorManagementConnectionString)) 
     { 
      using (SqlCommand cmd = new SqlCommand()) 
      { 
       cmd.CommandText = "SELECT Data FROM LostFound WHERE Id = @Id"; 
       cmd.Parameters.AddWithValue("@Id", imageId); 
       cmd.Connection = con; 
       con.Open(); 
       byte[] bytes = (byte[])cmd.ExecuteScalar(); 
       url = "data:image/png;base64," + Convert.ToBase64String(bytes, 0, bytes.Length); 
       con.Close(); 
      } 
     } 
     HttpContext.Current.Session["CapturedImageId"] = null; 
     return url; 
    } 
    protected void btnCapture_Click(object sender, EventArgs e) 
    { 

    } 

} 

Значения формы, которые никогда не были вставлены в базу данных. только datetime.now, imageName, contentType и данные могут быть вставлены. должен ли вставить текстовый запрос в btncapture?Значения от textBox, которые не вставлены в базу данных C#

Может ли кто-нибудь вести меня, где я иду не так?

+0

Что такое ItemName? –

+0

Не могли бы вы поделиться хранимой процедурой? Проблема может быть. – smoksnes

+0

ItemName и место выглядят как ключевые слова изменить его на другое имя и проверить –

ответ

0

Этот код должен по крайней мере быть нажатием кнопки.

К тому времени, событие Page_Load называется в asp.net page event life cycle в TextBoxes будет очищен.

0

Вы только отправляете в БД, если это не является обратной почтой.

if (!this.IsPostBack) 

Поскольку вы только работает это в Page_Load, то текстовые поля, вероятно, не имеют каких-либо данных, вводимых пользователем, и поэтому пустой. Либо вы можете сделать это на PostBack.

if (this.IsPostBack) 
{ 
    // Do stuff 
} 

Или, еще лучше, сделайте Джереми Томпсон предложил и назначить обработчик события, когда пользователь нажимает на кнопку. Выполнение такого рода логики в Page_Load часто возвращается и преследует вас позже. Что происходит, когда какой-либо другой разработчик добавляет UpdatePanel или другое событие обратной передачи? Затем этот код будет работать от каждые. Это не будет очень хорошо. Кажется, у вас уже есть обработчик событий для этого - btnCapture_Click, я предлагаю вам использовать его.

Пример:

В вашем HTML:

<asp:Button ID="Button1" runat="server" onclick="btnCapture_Click" Text="Button" /> 

И в вашей CS:

protected void btnCapture_Click(object sender, EventArgs e) 
{ 
    if (Request.InputStream.Length > 0) 
     { 
      using (StreamReader reader = new StreamReader(Request.InputStream)) 
      { 
       string hexString = Server.UrlEncode(reader.ReadToEnd()); 
       string imageName = DateTime.Now.ToString("dd-MM-yy hh-mm-ss"); 
       string imagePath = string.Format("~/losefound/{0}.png", imageName); 
       string ItemName = txtItemName.Text; 
       string Place = txtPlace.Text; 
       byte[] bytes = ConvertHexToBytes(hexString); 
       File.WriteAllBytes(Server.MapPath(imagePath), bytes); 
       string VisitorManagementConnectionString = ConfigurationManager.ConnectionStrings["VisitorManagementConnectionString"].ConnectionString; 
       using (SqlConnection con = new SqlConnection(VisitorManagementConnectionString)) 
       { 
        string query = "INSERT INTO LostFound (ItemName, FoundAt, TimeIn, ImageName, ContentType, Data) VALUES(@ItemName, @FoundAt, @TimeIn, @ImageName, @ContentType, @Data);SELECT SCOPE_IDENTITY()"; 
        using (SqlCommand cmd = new SqlCommand(query)) 
        { 
         cmd.Connection = con; 
         cmd.Parameters.AddWithValue("@ItemName", ItemName); 
         cmd.Parameters.AddWithValue("@FoundAt", Place); 
         cmd.Parameters.AddWithValue("@TimeIn", DateTime.Now); 
         cmd.Parameters.AddWithValue("@ImageName", imageName); 
         cmd.Parameters.AddWithValue("@ContentType", "image/png"); 
         cmd.Parameters.AddWithValue("@Data", bytes); 
         con.Open(); 

         Session["CapturedImageId"] = cmd.ExecuteScalar(); 

         con.Close(); 

        } 
       } 
      } 
     } 
} 

Если у вас возникли проблемы связывания на кнопку, вы можете взглянуть на this question.

Во-первых, проверьте, если у вас есть AutoEventWireup="true" в объявлении вашего ASPX.

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

btnCapture += new EventHandler(btnCapture_Click); 
+0

он не отображал значения внутри –

+0

Если вы используете отладчик в Visual Studio. Какова ценность 'txtItemName.Text'? – smoksnes

+0

Как только я отлаживаю прямой путь, чтобы перейти к обратной передаче, он не нажал кнопку –