A docx file is like a zip file, which is a collection of several files. How about converting to binary and then saving to DB
Something how it should work
To save
string filePath = ""; string connectionString = ""; FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read); BinaryReader reader = new BinaryReader(stream); byte[] file = reader.ReadBytes((int)stream.Length); reader.Close(); stream.Close(); SqlCommand command; SqlConnection connection = new SqlConnection(connectionString); command = new SqlCommand("INSERT INTO FileTable (File) Values(@File)", connection); command.Parameters.Add("@File", SqlDbType.Binary, file.Length).Value = file; connection.Open(); command.ExecuteNonQuery();
Retrieval is a bit complicated process, as shown below.
SqlConnection connection = new SqlConnection(""); string query = @" SELECT File FROM FileTable where FileID =" + 125; SqlCommand command = new SqlCommand(query, connection); FileStream stream; BinaryWriter writer; int bufferSize = 100; byte[] outByte = new byte[bufferSize]; long retval; long startIndex = 0; string pubID = ""; connection.Open(); SqlDataReader reader = command.ExecuteReader(CommandBehavior.Default); while (reader.Read()) { pubID = reader.GetString(0); stream = new FileStream("abc.docx", FileMode.OpenOrCreate, FileAccess.Write); writer = new BinaryWriter(stream); startIndex = 0; retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize); while (retval == bufferSize) { writer.Write(outByte); writer.Flush(); startIndex += bufferSize; retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize); } writer.Write(outByte, 0, (int)retval - 1); writer.Flush(); writer.Close(); stream.Close(); } reader.Close(); connection.Close();
Have a look at the following articles for reference and details.
Preservation
Retreival :
Asad butt
source share