Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在数据库中存储和检索二进制文件(fpt)_C#_.net - Fatal编程技术网

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

C# 在数据库中存储和检索二进制文件(fpt),c#,.net,C#,.net,我必须在数据库中存储指纹模板并检索它。 是否必须将列名设置为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 f

我必须在数据库中存储指纹模板并检索它。 是否必须将列名设置为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();

        }

我为您做了一些研究: 看


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

我已经为您做了一些研究: 看


似乎您没有按照正确的方式检索二进制数据,而且您的参数应该是SqlDbType。VarBinary读取文件的所有字节并将其存储到VarBinary(max)列。

读取文件的所有字节并将其存储到VarBinary(max)专栏。

感谢大家的指导,我得到了解决方案……非常感谢。
请确保数据库中二进制文件的列类型为varbinary(max)



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

    }