2012-12-31 3 views
-1

asp.net을 사용하여 SQL 데이터베이스에서 이진 데이터를 검색하려고합니다. 그러나 출력에 표시된 데이터가 내가 삽입 한 데이터와 일치하지 않습니다. 이 내 코드입니다 :asp.net을 사용하여 SQL 데이터베이스에서 이진 데이터 검색

string EQuery = "SELECT * FROM Ph_Tbl_Contacts WHERE (Contact_ID =" + Contact_ID + ")"; 

DataSet DSs = new DataSet(); 
DataTable dt = new DataTable(); 
DataRow dr = dt.NewRow(); 

DSs = DB.ExecuteQueryData(EQuery); 
dt = DSs.Tables[0]; 

// dr = dt.NewRow(); 
dr = dt.Rows[0]; 
byte[] pic; 
byte[] raw = (byte[])dr["Contact_CardImage"]; 
// Session[OpenDialog.STORED_IMAGE] = raw ; 

이것은 삽입 일부입니다

byte[] IMAGEbYTE ; 
IMAGEbYTE = (byte[])(Session["SessionImage"]); 
string Query = "INSERT INTO Ph_Tbl_Contacts (Contact_Name, Contact_LName, " + 
       "Contact_Company, Contact_Email, Contact_Tel, " + 
       "Contact_Mobile,Contact_CardImage,Is_Public,User_ID,Save_Date)" + 
       "VALUES (N'" + Txt_Name.Text + "', N'" + Txt_LastName.Text + "', N'" + 
       Txt_CompanyName.Text + "', N'" + Txt_Mail.Text + "', N'" + 
       Txt_Telephone.Text + "', N'" + Txt_Mobile.Text + "','" + 
       IMAGEbYTE + "','" + CheckValue + "'," + 
       Session["User_ID"] + ", N'" + DateStr + "')"; 

DB.ExecuteQueryNoData(Query) ; 
+3

당신이 매개 변수화 쿼리를 사용하지 않는 무엇을 얻을 것이다. – Steve

+0

@helia 데이터베이스에 바이너리 []로 이미지를 저장하고 거기에서 다시 가져 오시겠습니까? – Dev

+1

네, 정확히 어떻게 해야할지 모르겠습니다. –

답변

5

좋아, 코드를 청소를 시작하자. 첫 번째는 SQL 삽입에 취약하기 때문에 INSERT 코드를 수정하는 것입니다. =>

using (var conn = new SqlConnection("Your ConnectionString comes here")) 
using (var cmd = conn.CreateCommand()) 
{ 
    conn.Open(); 
    cmd.CommandText = 
    @"INSERT INTO Ph_Tbl_Contacts 
      (Contact_Name, 
      Contact_LName, 
      Contact_Company, 
      Contact_Email, 
      Contact_Tel, 
      Contact_Mobile, 
      Contact_CardImage, 
      Is_Public, 
      User_ID, 
      Save_Date) 
     VALUES 
      (@Contact_Name, 
      @Contact_LName, 
      @Contact_Company, 
      @Contact_Email, 
      @Contact_Tel, 
      @Contact_Mobile, 
      @Contact_CardImage, 
      @Is_Public, 
      @User_ID, 
      @Save_Date) 
    "; 
    cmd.Parameters.AddWithValue("@Contact_Name", Txt_Name.Text); 
    cmd.Parameters.AddWithValue("@Contact_LName", Txt_LastName.Text); 
    cmd.Parameters.AddWithValue("@Contact_Company", Txt_CompanyName.Text); 
    cmd.Parameters.AddWithValue("@Contact_Email", Txt_Mail.Text); 
    cmd.Parameters.AddWithValue("@Contact_Tel", Txt_Telephone.Text); 
    cmd.Parameters.AddWithValue("@Contact_Mobile", Txt_Mobile.Text); 
    cmd.Parameters.AddWithValue("@Contact_CardImage", IMAGEbYTE); 
    cmd.Parameters.AddWithValue("@Is_Public", CheckValue); 
    cmd.Parameters.AddWithValue("@User_ID", Session["User_ID"]); 
    cmd.Parameters.AddWithValue("@Save_Date", DateStr); 
    cmd.ExecuteNonQuery(); 
} 
다음

가 데이터베이스에서 Save_Date 열이 datetime 경우 문자열로 변환하려고 시도하면 매개 변수에 DateTime의 인스턴스를 전달하고 안된다고 언급 할 가치가있다 : 당신은 매개 변수화 쿼리를 사용할 필요가 DateStr은 DateTime이어야합니다. 좋아

, 이제 올바르게 데이터베이스에 레코드를 삽입 한 것을 당신은 그것을 읽을 수 있습니다 :

using (var conn = new SqlConnection("Your ConnectionString comes here")) 
using (var cmd = conn.CreateCommand()) 
{ 
    conn.Open(); 
    cmd.CommandText = 
    @"SELECT 
      Contact_CardImage 
     FROM 
      Ph_Tbl_Contacts 
     WHERE 
      Contact_ID = @Contact_ID 
    "; 
    cmd.Parameters.AddWithValue("@Contact_ID", Txt_Name.Text); 
    using (var reader = cmd.ExecuteReader()) 
    { 
     if (reader.Read()) 
     { 
      byte[] raw = (byte[])reader.Items["Contact_CardImage"]; 
      // TODO: do something with the raw data 
     } 
    } 
} 
+2

감사하지만이 오류가 있습니다 : 오류 'System.Data.SqlClient.SqlDataReader' 'System.Data.SqlClient.SqlDataReader'에 'System.Data.SqlClient'형식의 첫 번째 인수를 허용하는 '항목'및 확장 메서드 '항목'에 대한 정의가 없습니다. SqlDataReader '를 찾을 수 없습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?) –

+1

고맙습니다. –

관련 문제