2016-08-22 1 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) 
    { 

    } 

} 

Les valeurs forment la zone de texte jamais insérée dans la base de données. seulement datetime.now, imageName, contentType et les données peuvent être insérées. doit insérer la requête de zone de texte à btncapture? Est-ce que quelqu'un peut me guider où je vais mal?Les valeurs de textBox ne sont pas insérées dans la base de données C#

+0

Qu'est-ce que ItemName? –

+0

Pourriez-vous partager la procédure stockée? Le problème peut là. – smoksnes

+0

ItemName et Place ressemblent mots-clés le changer à un nom différent et vérifier –

Répondre

0

Ce code doit au moins être dans un clic de bouton.

Au moment où l'événement page_load est appelé dans asp.net page event life cycle les TextBoxes auront été effacés.

0

Vous envoyez uniquement à DB s'il s'agit de et non d'une publication.

if (!this.IsPostBack) 

Puisque vous ne diffusez cela dans Page_Load, les champs de texte aura probablement pas d'entrées utilisateur, et est donc vide. Soit vous pouvez le faire sur PostBack.

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

Ou, mieux encore, faire comme Jeremy Thompson suggéré et attribuer un gestionnaire d'événements lorsque l'utilisateur clique sur un bouton. Faire ce genre de logique dans Page_Load revient souvent et vous hante plus tard. Que se passe-t-il lorsqu'un autre développeur ajoute un UpdatePanel ou un autre événement de publication? Ensuite, ce code s'exécutera à chaque publication. Cela ne sera pas très bon. Il semble que vous avez déjà un gestionnaire d'événements pour cela - btnCapture_Click, je vous suggère de l'utiliser.

Exemple:

Dans votre HTML:

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

Et dans votre 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(); 

        } 
       } 
      } 
     } 
} 

Si vous rencontrez des problèmes liant le bouton, vous pouvez jeter un oeil à this question.

D'abord, vérifiez si vous avez AutoEventWireup="true" dans la déclaration de votre aspx.

Vous pouvez également essayer d'affecter manuellement le délégué.

btnCapture += new EventHandler(btnCapture_Click); 
+0

il n'a pas montré de valeur à l'intérieur –

+0

Si vous utilisez le débogueur dans Visual Studio. Quelle est la valeur de 'txtItemName.Text'? – smoksnes

+0

Une fois que j'ai débogué droit saute à la publication, il ne saute pas au bouton –