C# 在数据库中存储和检索二进制文件(fpt)
我必须在数据库中存储指纹模板并检索它。 是否必须将列名设置为image或var binary(max)? 我尝试了一些网站上的代码,但没有成功 我从数据库中检索到一个空白文件。 我使用SQLServer2005在c#.net中做这个项目。 ftp文件的大小为1.59kb 提前谢谢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
//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();
}