在数据库中存储和检索二进制文件(fpt)

本文关键字:二进制文件 fpt 检索 数据库 存储 | 更新日期: 2023-09-27 18:26:31

我必须在数据库中存储指纹模板并检索它。我必须将列名设置为image还是var binary(max)?我尝试了一些网站上的一些代码,但没有成功。

我从数据库中检索到一个空白文件。我使用sqlserver2005在c#.net中做这个项目。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();
        }

在数据库中存储和检索二进制文件(fpt)

感谢大家的指导,我得到了解决方案。。。。。非常感谢
请确保数据库中二进制文件的列类型为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();
    }

我为您做了一些研究:看这里

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

读取文件的所有字节,并将其存储到varbinary(max)列中。