2014-10-08 81 views
0

我試圖將圖像文件以二進制格式保存到數據庫中。並檢索這些二進制文件,並在我的網頁上顯示圖像。在使用下面的代碼時,會產生一個錯誤。請幫幫我。已經有一個與此命令相關的開放式數據讀取器,必須先關閉它。?8

public partial class Default3 : System.Web.UI.Page 
{ 
    static SqlConnection con = new SqlConnection(@"connectionString"); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      filldropdown(); 
     } 
    } 

    private void filldropdown() 
    { 
     SqlCommand cmd = new SqlCommand("Select EmpID from Tbl_Emp", con); 
     if (con.State == ConnectionState.Closed) 
     { 
      con.Open(); 
     } 
     SqlDataReader dr = cmd.ExecuteReader(); 
     TextBox3.Items.Clear(); 
     if (dr.HasRows) 
     { 

      while (dr.Read()) 
      { 
       TextBox3.Items.Add(dr["EmpID"].ToString()); 
      } 
     } 
     con.Close(); 
    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     SqlCommand cmd = new SqlCommand("insert into Tbl_Emp values(@id,@name,@image)", con); 
     cmd.Parameters.AddWithValue("@id", TextBox1.Text); 
     cmd.Parameters.AddWithValue("@name", TextBox2.Text); 

     int img = FileUpload1.PostedFile.ContentLength; 

     byte[] msdata = new byte[img]; 

     FileUpload1.PostedFile.InputStream.Read(msdata, 0, img); 

     cmd.Parameters.AddWithValue("@image", msdata); 

     if (con.State == ConnectionState.Closed) 
     { 
      con.Open(); 
     } 
     cmd.ExecuteNonQuery(); 

     con.Close(); 
     filldropdown(); 
     Response.Write("Data Saved ...."); 

    } 
    protected void Button2_Click(object sender, EventArgs e) 
    { 
     SqlCommand cmd = new SqlCommand("select * from Tbl_Emp where [email protected]", con); 
     cmd.Parameters.AddWithValue("@id", TextBox3.Text); 
     if (con.State == ConnectionState.Closed) 
     { 
      con.Open(); 
     } 
     SqlDataReader dr = cmd.ExecuteReader(); 
     if (dr.HasRows && dr.Read()) 
     { 
      TextBox1.Text = dr["EmpID"].ToString(); 
      TextBox2.Text = dr["EmpName"].ToString(); 
      Image1.ImageUrl = "Handler.ashx?EmpID=" + TextBox3.Text; 
     } 
     else 
     { 
      Response.Write("Record With This ID Note Found"); 
     } 
    } 
} 

來源:

<div> 
     Enter ID <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /> 
     Enter Name <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br /> 
     Enter Pic <asp:FileUpload ID="FileUpload1" runat="server" /><br /> 
     <asp:Button ID="Button1" runat="server" Text="Save" onclick="Button1_Click" /><br > 
     <asp:Image ID="Image1" runat="server" Height="137px" Width="130px" /><br /> 
     <asp:DropDownList ID="TextBox3" runat="server"> 
     </asp:DropDownList> 
     <asp:Button ID="Button2" runat="server" Text="Search" onclick="Button2_Click" /> 

數據表:

enter image description here

回答

2

這是正確的答案。

public partial class Default3 : System.Web.UI.Page 
{ 
    static SqlConnection con = new SqlConnection(@"connectionString"); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      filldropdown(); 
     } 
    } 

    private void filldropdown() 
    { 
     SqlCommand cmd = new SqlCommand("Select EmpID from Tbl_Emp", con); 
     if (con.State == ConnectionState.Closed) 
     { 
      con.Open(); 
     } 
     SqlDataReader dr = cmd.ExecuteReader(); 
     TextBox3.Items.Clear(); 
     if (dr.HasRows) 
     { 

      while (dr.Read()) 
      { 
       TextBox3.Items.Add(dr["EmpID"].ToString()); 
      } 
     } 
     dr.Close(); 
     con.Close(); 
    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     SqlCommand cmd = new SqlCommand("insert into Tbl_Emp values(@id,@name,@image)", con); 
     cmd.Parameters.AddWithValue("@id", TextBox1.Text); 
     cmd.Parameters.AddWithValue("@name", TextBox2.Text); 

     int img = FileUpload1.PostedFile.ContentLength; 

     byte[] msdata = new byte[img]; 

     FileUpload1.PostedFile.InputStream.Read(msdata, 0, img); 

     cmd.Parameters.AddWithValue("@image", msdata); 

     if (con.State == ConnectionState.Closed) 
     { 
      con.Open(); 
     } 
     cmd.ExecuteNonQuery(); 

     con.Close(); 
     filldropdown(); 
     Response.Write("Data Saved ...."); 

    } 
    protected void Button2_Click(object sender, EventArgs e) 
    { 
     SqlCommand cmd = new SqlCommand("select * from Tbl_Emp where [email protected]", con); 
     cmd.Parameters.AddWithValue("@id", TextBox3.Text); 
     if (con.State == ConnectionState.Closed) 
     { 
      con.Open(); 
     } 
     SqlDataReader dr = cmd.ExecuteReader(); 
     if (dr.HasRows && dr.Read()) 
     { 
      TextBox1.Text = dr["EmpID"].ToString(); 
      TextBox2.Text = dr["EmpName"].ToString(); 
      Image1.ImageUrl = "Handler.ashx?EmpID=" + TextBox3.Text; 
     } 
     else 
     { 
      Response.Write("Record With This ID Note Found"); 
     } 
     dr.Close(); 
    } 
} 
+0

謝謝。現在它正在工作。 – Vipin 2014-10-08 11:23:55

2

你必須開闢新的之一,因爲它運行時的對象之前關閉SqlDataReader對象..

這樣緊密ID

dr.Close(); 
+0

爲什麼兩次發佈基本相同的答案而不是編輯這個答案? – juharr 2014-10-08 11:36:56

3

處理清理SQL連接,命令和讀者的最佳方式是使用using聲明。此外,您並不需要根據您發佈的代碼將連接保持爲靜態字段。這裏的基本上是我會在每個方法

protected void Some_Action(object sender, EventArgs e) 
{ 
    using(SqlConnection con = new SqlConnection(@"connectionString")) 
    { 
     con.Open(); 
     using(SqlCommand cmd = new SqlCommand("Query Here", con)) 
     { 
      // Do stuff with the command here like setting Parameters. 
      using(SqlDataReader dr = cmd.ExecuteReader()) 
      { 
       // Do stuff with the reader here 
      } 
     } 
    } 
} 

這樣做將確保即使發生異常的連接,命令和Reader配置。

0

這將是更好地使用Using,它會自動Dispose你的連接/讀者什麼你已經打開

using(SqlConnection con=new SqlConnection) 
    { 
    SqlCommand cmd=new SqlCommand(con,"query") 
    .... 
    using(SqlDataReader dr=cmd.ExecuteReader()) 
     {  .... 
     } 
    } 

但你可以使用像這樣在現有的代碼

private void filldropdown() 
    { 
     SqlCommand cmd = new SqlCommand("Select EmpID from Tbl_Emp", con); 
     if (con.State == ConnectionState.Closed) 
     { 
      con.Open(); 
     } 
     SqlDataReader dr = cmd.ExecuteReader(); 
     TextBox3.Items.Clear(); 
     if (dr.HasRows) 
     { 

      while (dr.Read()) 
      { 
       TextBox3.Items.Add(dr["EmpID"].ToString()); 
      } 
     } 
     con.Close(); 
    dr.Close 
    } 





protected void Button2_Click(object sender, EventArgs e) 
    { 
     SqlCommand cmd = new SqlCommand("select * from Tbl_Emp where [email protected]", con); 
     cmd.Parameters.AddWithValue("@id", TextBox3.Text); 
     if (con.State == ConnectionState.Closed) 
     { 
      con.Open(); 
     } 
     SqlDataReader dr = cmd.ExecuteReader(); 
     if (dr.HasRows && dr.Read()) 
     { 
      TextBox1.Text = dr["EmpID"].ToString(); 
      TextBox2.Text = dr["EmpName"].ToString(); 
      Image1.ImageUrl = "Handler.ashx?EmpID=" + TextBox3.Text; 
     } 
     else 
     { 
      Response.Write("Record With This ID Note Found"); 
     } 
    dr.Close(); 
    } 
+0

發佈只包含兩個已有答案的答案是否真的有意義? – juharr 2014-10-08 11:39:10

+0

@juharr其實它是由於互聯網Connection.During回答我已經SAW只有1不完整的答案 – 2014-10-08 11:42:44

相關問題