2016-08-22 19 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およびdataのみを挿入できます。 btncaptureでテキストボックスクエリを挿入する必要がありますか?テキストボックスからの値がデータベースに挿入されないC#

誰かが私を導くことができますか?どこが間違っていますか?

+0

ItemNameとは何ですか? –

+0

ストアドプロシージャを共有できますか?問題はそこにあるかもしれない。 – smoksnes

+0

ItemNameとPlaceはキーワードのように見えます。別の名前に変更してください。 –

答えて

0

このコードは、以上、少なくともでなければなりません。

asp.net page event life cycleでpage_loadイベントが呼び出される頃に、TextBoxesはクリアされます。

0

ポストバックでない場合は、DBに送信するのはです。

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を見てみることができます。

まず、お客様のaspxの宣言にAutoEventWireup="true"があるかどうかを確認してください。

また、代理人を手動で割り当てることもできます。

btnCapture += new EventHandler(btnCapture_Click); 
+0

Visual Studioでデバッガを使用すると、 –

+0

に値が表示されませんでした。 'txtItemName.Text'の値は何ですか? – smoksnes

+0

一度ポストバックにジャンプすると、ボタンにジャンプしませんでした。 –

関連する問題