2016-08-22 52 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?來自textBox的值未被插入到數據庫C中#

有人可以指導我哪裏錯了?

+0

什麼是ItemName? –

+0

你可以分享存儲過程嗎?問題可能在那裏。 – smoksnes

+0

ItemName和Place看起來像關鍵字更改爲不同的名稱和檢查 –

回答

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看一看。

首先,檢查您的aspx聲明中是否有AutoEventWireup="true"

您也可以嘗試手動分配委託。

btnCapture += new EventHandler(btnCapture_Click); 
+0

它沒有在內部顯示任何值 –

+0

如果您在Visual Studio中使用調試器。 'txtItemName.Text'的價值是什麼? – smoksnes

+0

一旦我調試直線方式跳轉到回發它沒有跳轉到按鈕 –