Încărcarea datelor în filestream
În această notă, vom vorbi pe scurt despre modul în care puteți organiza importul / exportul unui fișier din sistemul de fișiere în câmpul filestream al tabelului de pe serverul SQL și înapoi.
Metoda 3. OpenSqlFilestream API.
O excepție de prima șansă de tip "System.ComponentModel.Win32Exception" a apărut în System.Data.dll
O eroare de .NET Framework FilmedreamStuff:
System.ComponentModel.Win32Exception: Cererea nu este acceptată
la System.Data.SqlTypes.SqlFileStream.OpenSqlFileStream (calea String, Byte [] transactionContext, acces FileAccess, opțiunile FileOptions, Int64 allocationSize)
la System.Data.SqlTypes.SqlFileStream..ctor (calea String, Byte [] transactionContext, acces FileAccess, opțiunile FileOptions, Int64 allocationSize)
la System.Data.SqlTypes.SqlFileStream..ctor (calea de caractere, Byte [] transactionContext, accesul FileAccess)
la UserDefinedProcedures.FilestreamStuff (SqlString tblName, SqlString fsFldName, SqlGuid ROWID, SqlString strToInsert, SqlInt64 startPos, SqlInt64 numExistingCharsToSubstitute)
Operația utilizatorului, dacă este cazul, va fi reintrodusă.
Nu sunt afectate rândurile.
(0 rânduri returnate)
Metoda 4: Nu este recomandată.
În ciuda simplității brute a acestei metode, nu aș recomanda să recurg la ea în niciun caz. a) utilizează caracteristicile nedocumentate ale serverului SQL, care nu pot fi acceptate în versiunea următoare și b) acționează pentru a ocoli mecanismul de execuție SQL Server. Deoarece SQL Server nu știe nimic despre ce vom chemi în spatele ei, nu va lua în considerare aceste modificări și nu le va reflecta în jurnalul tranzacțiilor, ceea ce poate duce la încălcări ale integrității tranzacționale și pierderii datelor. "Aceasta va întinde toate picioarele procesorului, piesele de pe placă vor fi închise, metalul fierbinte va curge prin slotul drive-ului prin slotul unității." Această metodă este dată exclusiv scopurilor academice pentru completitudine și dezvoltare generală, dar nu pentru aplicații practice.
Blocul FileStream are o metodă PathName (). Pentru a face să funcționeze, faylstrim atât nivelul SQL Server cât și la nivelul sistemului de fișiere ar trebui să fie configurat în poziția 2 (a se vedea continuarea postului „Introducere în faylstrim.“), Care este, aveți nevoie pentru a pune cele două ciori, nu numai Activați FILESTREAM pentru Transact-SQL dar, de asemenea, Activați FILESTREAM pentru accesul la fluxul I / O în flux, atât în SQL Server Configuration Manager, cât și în SQL Server. Și nu poți pune, deoarece această metodă nu are nimic de-a face cu calea fizică și numele de fișier care conține un câmp faylstrim această intrare în sistemul de fișiere. Se întoarce o pseudo-cale compusă
\\<Имя компьютера>\ MSSQLSERVER \ v1 \<Имя базы>\<Имя схемы>\<Имя таблицы>\<Имя файлстримовского поля>\<гуид записи из поля rowguidcol>.
selectați stream.PathName () din Media
selectați stream.PhysicalPathName () din Media unde $ rowguid = '01588060-47FD-425B-997A-96375885395A'
Tot ce trebuie lăsat acum să faceți este să copiați fișierul de interes pentru el. Parametrii procedurii sunt identici cu parametrii ReadFileToBlobField, vezi "Import / Export de câmpuri Blob în fișiere - CLR". Codul funcției de verificare CheckObjectsValidity este de asemenea dat acolo.
// exec ReadFileToFSBlobField 'Media', 'flux', '01588060-47FD-425B-997A-96375885395A', 'C: \ Temp \ Book1.csv'
public void static ReadFileToFSBlobField (SqlString tblName, SqlString colName, SqlGuid guid, SqlString fileName)
dacă (! CheckObjectsValidity (tblName, colName)) retur;
SqlConnection cnn = SqlConnection nou ("context connection = true"); cnn.Open ();
SqlCommand cmd = new SqlCommand ( "select" + colName.ToString () + ".PhysicalPathName () de la" + tblName.ToString () + "în cazul în care $ rowguid = @guid", cnn);
cmd.Parameters.Add (noul SqlParameter ("guid", guid));
string șirFileName = (șir) cmd.ExecuteScalar ();
Calea de retur este de la un fișier dintr-un fișier la un fișier liber.
// WriteFSBlobFieldToFile Exec 'Media', 'flux', '01588060-47FD-425B-997A-96375885395A', 'C: \ Temp \ Book2.csv'
public void static WriteFSBlobFieldToFile (SqlString tblName, SqlString colName, SqlGuid guid, SqlString fileName)
dacă (! CheckObjectsValidity (tblName, colName)) retur;
SqlConnection cnn = SqlConnection nou ("context connection = true"); cnn.Open ();
SqlCommand cmd = new SqlCommand ( "select" + colName.ToString () + ".PhysicalPathName () de la" + tblName.ToString () + "în cazul în care $ rowguid = @guid", cnn);
cmd.Parameters.Add (noul SqlParameter ("guid", guid));
string șirFileName = (șir) cmd.ExecuteScalar ();