2011-11-01 11 views
4

SQL Server에 데이터를 삽입하는 몇 가지 방법이 있습니다 (FileStream의 경우). FileStream 객체를 삽입하는 가장 좋은 방법은 무엇입니까? 아래의 접근 방식과 FileStream 객체를위한 자리 표시 자에 넣는 방식이 서로 다른 점이 주된 차이점입니다.SQL Server FileStream filestream 열을 채우는 방법

링크 : FileStream

con.Open(); 
    string sql = "INSERT INTO MyFsTable VALUES (@fData, @fName, default)"; 
    SqlCommand cmd = new SqlCommand(sql, con); 
    cmd.Parameters.Add("@fData", SqlDbType.Image, fileData.Length).Value = fileData; 
    cmd.Parameters.Add("@fName", SqlDbType.NVarChar).Value = fi.Name; 
    cmd.ExecuteNonQuery(); 
    con.Close(); 

들은 행을 삽입하지만, 문서를 남겨 다른 접근법 (하여 FileStream

한가지 방법은 직접 삽입 통해 C# 통해 문서를 삽입되었다는 것이다 열) null. FileStream을 열 때 널 내 파일 가져 오기 경로 호출이 널 (null)을 반환 때문에 더미 값에 넣어했다 :

링크 : FileStream

5: if (FileUpload1.FileContent.Length > 0) 
    6: { 
    7:  SqlConnection objSqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
    8:  objSqlCon.Open(); 
    9:  SqlTransaction objSqlTran = objSqlCon.BeginTransaction(); 
    10: 
    11:  SqlCommand objSqlCmd = new SqlCommand("FileAdd",objSqlCon,objSqlTran); 
    12:  objSqlCmd.CommandType = CommandType.StoredProcedure; 
    13: 
    14:  SqlParameter objSqlParam1 = new SqlParameter("@SystemNumber", SqlDbType.Int); 
    15:  objSqlParam1.Value = "1"; 
    16: 
    17:  SqlParameter objSqlParam2 = new SqlParameter("@FileType", SqlDbType.VarChar,4); 
    18:  objSqlParam2.Value = System.IO.Path.GetExtension(FileUpload1.FileName); 
    19: 
    20:  SqlParameter objSqlParamOutput = new SqlParameter("@filepath", SqlDbType.VarChar, -1); 
    21:  objSqlParamOutput.Direction = ParameterDirection.Output; 
    22: 
    23:  objSqlCmd.Parameters.Add(objSqlParam2); 
    24:  objSqlCmd.Parameters.Add(objSqlParam1); 
    25:  objSqlCmd.Parameters.Add(objSqlParamOutput); 
    26: 
    27: 
    28:  objSqlCmd.ExecuteNonQuery(); 
    29: 
    30:  string Path = objSqlCmd.Parameters["@filepath"].Value.ToString(); 
    31: 
    32:  objSqlCmd = new SqlCommand("SELECT GET_FILESTREAM_TRANSACTION_CONTEXT()", objSqlCon, objSqlTran); 
    33: 
    34:  byte[] objContext = (byte[])objSqlCmd.ExecuteScalar(); 
    35:  
    36: 
    37:  SqlFileStream objSqlFileStream = new SqlFileStream(Path, objContext, FileAccess.Write); 
    38:  
    39:  objSqlFileStream.Write(buffer, 0, buffer.Length); 
    40:  objSqlFileStream.Close(); 
    41: 
    42:  objSqlTran.Commit(); 

답변

6

업로드 및 파일 스트림을 다운로드하는 방법을 보여주는 예를 들어 FILESTREAM MVC: Download and Upload images from SQL Server를 참조하십시오 효율적이고 스트림 지향적 인 방식으로 당신이 추구하는 접근 방식은 업로드 된 전체 파일의 크기만큼 버퍼를 할당하는 것입니다. (또한 여러분도 같은 방식으로 내용을 처리한다고 가정합니다) 매우 비효율적입니다. ASP 프로세스 메모리는 이러한 대형 바이트 [ 작업.

+0

감사합니다. 감사합니다. 감사합니다. – scarpacci