Het rechtstreeks uitlezen van BLOB's vanuit mijn SQL server 2005 op de PDA vormt geen probleem.
Met merge replication maak ik een SQL server compact aan, met de identieke gegevens van SQL server 2005.
De C# code wordt enkel gewijzigd van voorbeeld SqlConnection naar SqlceConnection en dergelijke (zie code hieronder). Wanneer ik deze run op mijn PDA dan zal hij telkens bij startIndex = 200 een execption geven. Dus bij het afhalen 100 bytes startend bij byte 200.
Fout: '$exception.Message' threw an exception of type 'System.NotSupportedException'
Waar aan zou dit kunnen liggen?
Met merge replication maak ik een SQL server compact aan, met de identieke gegevens van SQL server 2005.
De C# code wordt enkel gewijzigd van voorbeeld SqlConnection naar SqlceConnection en dergelijke (zie code hieronder). Wanneer ik deze run op mijn PDA dan zal hij telkens bij startIndex = 200 een execption geven. Dus bij het afhalen 100 bytes startend bij byte 200.
Fout: '$exception.Message' threw an exception of type 'System.NotSupportedException'
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| SqlCeConnection cnn = new SqlCeConnection(); cnn.ConnectionString = Housekeeping.LocalMRDbConnectionString; cnn.Open(); SqlCeCommand dbCmd = new SqlCeCommand("Select mcntImage from MonumentContent", cnn); FileStream fs; // Writes the BLOB to a file (*.bmp). BinaryWriter bw; // Streams the BLOB to the FileStream object. int bufferSize = 100; // Size of the BLOB buffer. byte[] outbyte = new byte[bufferSize]; // The BLOB byte[] buffer to be filled by GetBytes. long retval; // The bytes returned from GetBytes. long startIndex = 0; // The starting position in the BLOB output. // Open the connection and read data into the DataReader. SqlCeDataReader myReader = dbCmd.ExecuteReader(CommandBehavior.SequentialAccess); while (myReader.Read()) { // Create a file to hold the output. fs = new FileStream("monument" + emp_id + ".jpg", FileMode.OpenOrCreate, FileAccess.Write); bw = new BinaryWriter(fs); // Reset the starting byte for the new BLOB. startIndex = 0; // Read the bytes into outbyte[] and retain the number of bytes returned. retval = myReader.GetBytes(0, startIndex, outbyte, 0, bufferSize); // Continue reading and writing while there are bytes beyond the size of the buffer. while (retval == bufferSize) { bw.Write(outbyte); bw.Flush(); // Reposition the start index to the end of the last buffer and fill the buffer. startIndex += bufferSize; retval = myReader.GetBytes(0, startIndex, outbyte, 0, bufferSize); [b]//Hier fout bij tweede loop[/b] } // Write the remaining buffer. bw.Write(outbyte, 0, (int)retval); bw.Flush(); // Close the output file. bw.Close(); fs.Close(); } // Close the reader and the connection. myReader.Close(); cnn.Close(); |
Waar aan zou dit kunnen liggen?