コード例 #1
0
        public int PostFile(FileModel fileModel)
        {
            int result = 0;
            using (SqlConnection conn = GetConnection())
            {
                using (SqlTransaction trn = conn.BeginTransaction())
                {
                    SqlCommand cmdInsert = new SqlCommand(
                        @"INSERT INTO "+TableName+@" (
                            Name,
                            Path,
                            ContentType)
                        values (
                            @name,
                            @path,
                            @contentType);Select Scope_Identity();", conn, trn);
                    cmdInsert.Parameters.Add("@name", SqlDbType.VarChar, 256);
                    cmdInsert.Parameters["@name"].Value = fileModel.Name;
                    cmdInsert.Parameters.Add("@path", SqlDbType.VarChar, 256);
                    cmdInsert.Parameters["@path"].Value = fileModel.Path;
                    cmdInsert.Parameters.Add("@contentType", SqlDbType.VarChar, 256);
                    cmdInsert.Parameters["@contentType"].Value = fileModel.ContentType;

                    result = Convert.ToInt32(cmdInsert.ExecuteScalar());


                    SqlCommand cmdFirstData = new SqlCommand(
                        @"UPDATE "+TableName+@"
                            SET content = @data
                            WHERE id = @id", conn, trn);
                    cmdFirstData.Parameters.Add("@data", SqlDbType.VarBinary, -1);
                    cmdFirstData.Parameters.Add("@id", SqlDbType.Int);
                    cmdFirstData.Parameters["@id"].Value = result;



                    SqlCommand cmdUpdate = new SqlCommand(
                            @"UPDATE "+TableName+@"
                            SET content.write (@data, NULL, NULL)
                            WHERE id = @id", conn, trn);
                    cmdUpdate.Parameters.Add("@data", SqlDbType.VarBinary, -1);
                    cmdUpdate.Parameters.Add("@id", SqlDbType.Int);
                    cmdUpdate.Parameters["@id"].Value = result;


                    using (System.IO.Stream uploadStream = new BufferedStream(
                        new SqlStreamUpload
                        {
                            InsertCommand = cmdFirstData,
                            InsertDataParam = cmdFirstData.Parameters["@data"],
                            InsertIdParam = cmdFirstData.Parameters["@id"],
                            UpdateCommand = cmdUpdate,
                            UpdateDataParam = cmdUpdate.Parameters["@data"],
                            UpdateIdParam = cmdUpdate.Parameters["@id"]
                        }, 8040))
                    {
                        fileModel.InputStream.CopyTo(uploadStream);
                    }
                    
                    trn.Commit();
                }
            }
            return result;
        }
コード例 #2
0
        public FileModel GetFile(int id)
        {
            SqlConnection conn = GetConnection();
            FileModel result = null;
            try
            {
                SqlCommand cmd = new SqlCommand(
                        
                    @"SELECT name,
                        path,
	                    contentType,
	                    content
                    FROM "+TableName+@"
                    WHERE id = @id;", conn);
                //content_coding, DATALENGTH(content) as content_length,

                cmd.Parameters.Add("@id", SqlDbType.Int);
                cmd.Parameters["@id"].Value = id;

                SqlDataReader reader = cmd.ExecuteReader(
                    CommandBehavior.SequentialAccess |
                    CommandBehavior.SingleResult |
                    CommandBehavior.SingleRow |
                    CommandBehavior.CloseConnection);
                if (false == reader.Read())
                {
                    reader.Dispose();
                    conn = null;
                    return null;
                }

                string name = reader["name"].ToString();
                string path = reader["path"].ToString();
                string contentType = reader["ContentType"].ToString();
                System.IO.Stream contentStream = new SqlReaderStream(reader, 3);

                result = new FileModel
                {                    
                    Name = name,
                    Path = path,
                    ContentType = contentType,
                    OutputStream = contentStream,                    
                };
                conn = null; // ownership transfered to the reader/stream
                return result;
            }
            finally
            {
                if (null != conn)
                {
                    conn.Dispose();
                }
            }
        }