2012-03-04 98 views
1

我必须将指纹模板存储在数据库中并检索它。 我必须将列名称设置为图像或var binary(max)吗? 我尝试了一些网站的一些代码,但没有奏效。存储和检索数据库中的二进制文件(fpt)

我从数据库中检索到一个空白文件。 正在使用SQL Server 2005 FTP文件是

在此先感谢1.59kb大小

//to add new user 
     public void AddUser(string name,byte[] pf,int length) 
     { 

//code to insert file in database 
      cn = new SqlConnection(connstring); 
      cmd = new SqlCommand("adduser", cn); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@name", name); 
      //to save converted image to variable 
      SqlParameter UploadedImage = new SqlParameter("@fp", SqlDbType.Binary, length); 
      UploadedImage.Value = pf; 
      cmd.Parameters.Add(UploadedImage); 
      cn.Open(); 
      cmd.ExecuteNonQuery(); 
      cn.Close(); 
     } 
     //retrieve fingerprint from database 
     public void FingerPrintRtvl(string uid) 
     { 

       cn = new SqlConnection(connstring); 
       adp = new SqlDataAdapter("fingerprintrtvl", cn); 
       adp.SelectCommand.CommandType = CommandType.StoredProcedure; 
       adp.SelectCommand.Parameters.AddWithValue("@uid", Convert.ToInt32(uid)); 
       DataSet ds = new DataSet("MyImages"); 
       cn.Open(); 
       adp.Fill(ds, "MyImages"); 
       cn.Close(); 

       byte[] MyData = new byte[57]; 

       DataRow myRow; 
       myRow = ds.Tables["MyImages"].Rows[0]; 

       MyData = (byte[])myRow["fp"]; 
       int ArraySize = new int(); 
       ArraySize = MyData.GetUpperBound(0); 
       string temp = System.IO.Path.GetTempPath(); 
       string fpFile = "D:\\" + "fingerprint.fpt"; 
       FileStream fs = new FileStream(fpFile, FileMode.OpenOrCreate, FileAccess.Write); 
       fs.Write(MyData, 0, ArraySize); 
       fs.Close(); 

     } 

回答

0

我已经做了一些研究,为你做的项目在C#.NET: 看here

似乎你没有按照正确的方式来检索二进制数据,你的参数也应该是SqlDbType.VarBinary

0

读取文件的所有字节和st将其加入到varbinary(max)色谱柱中。

1

感谢大家的指导和我得到的解决方案.....非常感谢。
请确保该二进制文件的列类型是VARBINARY(max)存储在数据库


using system.data.Sqlclient; 
    using system.IO; 
    using system.Data; 

    //function to store the fingerprint in database 
    public void AddUser(string name) 
    { 
     // Read the file and convert it to Byte Array//,byte[] pf,int length 
     string filePath = @"D:\10.fpt"; 
     string filename = Path.GetFileName(filePath); 
     FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); 
     BinaryReader br = new BinaryReader(fs); 
     Byte[] bytes = br.ReadBytes((Int32)fs.Length); 
     br.Close(); 
     fs.Close(); 

     //insert the file into database 
     SqlConnection cn = new SqlConnection(connstring); 
     SqlCommand cmd = new SqlCommand("adduser", cn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = name; 
     cmd.Parameters.Add("@fp", SqlDbType.Binary).Value = bytes; 

     cn.Open(); cmd.ExecuteNonQuery(); 
     cn.Close(); 


    } 

    //retrieve fingerprint from database 
    public void FingerPrintRtvl(string uid) 
    { 

     //retrieving the file from the database 
     SqlConnection cn = new SqlConnection(connstring); 
     SqlDataAdapter adp = new SqlDataAdapter("fingerprintrtvl", cn); 
     adp.SelectCommand.CommandType = CommandType.StoredProcedure; 
     adp.SelectCommand.Parameters.AddWithValue("@uid", Convert.ToInt32(uid)); 
     DataSet ds = new DataSet("MyImages"); 
     cn.Open(); 
     adp.Fill(ds, "MyImages"); 
     cn.Close(); 

     //storing the file in byte array 
     byte[] MyData = new byte[0]; 

     DataRow myRow; 
     myRow = ds.Tables["MyImages"].Rows[0]; 

     MyData = (byte[])myRow["fp"]; 
     int ArraySize = new int(); 
     ArraySize = MyData.GetUpperBound(0); 
     string temp = System.IO.Path.GetTempPath(); 
     string fpFile = "D:\\" + "Aadhaarfingerprint.fpt"; 
     //saving the byte array in the local drive 
     FileStream fs = new FileStream(fpFile, FileMode.OpenOrCreate, FileAccess.Write); 
     fs.Write(MyData, 0, ArraySize); 
     fs.Close(); 

    } 
相关问题