从SQLdatabase检索varbinary数据字段

Ahm*_*rid 3 c# sql

我在数据库中存储文件,这是我正在使用的代码,它可以添加数据,但现在我想要将其检索回来.我怎样才能做到这一点?

string filename = FileUploader.PostedFile.FileName;
    string filecontent = FileUploader.PostedFile.ContentType;
    int filesize = FileUploader.PostedFile.ContentLength;

    string filepath = System.IO.Path.GetFileName(filename);


    FileUploader.PostedFile.SaveAs("c:\\try\\" + filepath);

    byte[] fileData = new byte[FileUploader.PostedFile.ContentLength];
    FileUploader.PostedFile.InputStream.Read(fileData, 0, fileData.Length);
    string originalName = Path.GetFileName(FileUploader.PostedFile.FileName);


    con.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["FAQ"].ToString();

    con.Open();

    using (SqlCommand cmd = new SqlCommand("INSERT INTO Files(FileData) VALUES (@binaryValue)", con))
    {
        // Replace 8000, below, with the correct size of the field
        cmd.Parameters.Add("@binaryValue", SqlDbType.VarBinary, fileData.Length).Value = fileData;
        cmd.ExecuteNonQuery();
        con.Close();
    }
Run Code Online (Sandbox Code Playgroud)

Eri*_*ric 9

您可以使用a SqlDataReader来获取值,并BinaryWriter创建文件,如下所示:

//Database connection code...
cmd.CommandText = "SELECT FileData FROM Files WHERE ID = @ID";
cmd.Parameters.Add("@ID", SqlDbType.Int).Value = 1234;
SqlDataReader sqlRead = cmd.ExecuteReader();

string fileName = "file.txt";
string fileDir = "C:\\Test\\";
string fileUrl = "/";

if (sqlRead.HasRows)
{
    while(sqlRead.Read())
    {
        byte[] fileData = (byte[]) sqlRead[0].Value;
        BinaryWriter fileCreate = 
            new BinaryWriter(File.Open(fileDir + fileName, FileMode.Create));
        fileCreate.Write(fileData);
        fileCreate.Close();
        HttpResponse.Redirect(fileUrl + fileName);
    }
}

sqlRead.Close();
Run Code Online (Sandbox Code Playgroud)

  • line byte [] fileData =(byte [])sqlRead [0] .Value; SqlDataReader没有要调用的"Value"方法! (2认同)