0

使用本网站的以下语法检索来自数据库的图像文件路径时,我目前收到错误消息:

private void DisplayImages(DataRow row, string img, string ImagePath)
{
    FileStream stream = new FileStream(ImagePath, FileMode.Open, FileAccess.Read);
    byte[] ImgData = new byte[stream.Length];
    stream.Read(ImgData, 0, Convert.ToInt32(stream.Length));
    stream.Close();
    row[img] = ImgData;
}

列名以Image数据类型命名nvarchar。我目前遇到的错误发布在下面

String 的 SourceColumn 'Image' 与 Byte[] 的 DataColumn 'Image' 之间存在不可转换的类型不匹配。

4

1 回答 1

0

不要使用 nvarchar 类型,这里使用 BLOB 示例: http: //msdn2.microsoft.com/en-us/library/87z0hy49 (VS.80).aspx 代码片段

// Assumes that connection is a valid SqlConnection object.
            SqlCommand command = new SqlCommand(
              "SELECT pub_id, logo FROM pub_info", connection);

            // Writes the BLOB to a file (*.bmp).
            Stream stream;
            // Streams the BLOB to the FileStream object.
            BinaryWriter writer;

            // Size of the BLOB buffer.
            int bufferSize = 100;
            // The BLOB byte[] buffer to be filled by GetBytes.
            byte[] outByte = new byte[bufferSize];
            // The bytes returned from GetBytes.
            long retval;
            // The starting position in the BLOB output.
            long startIndex = 0;

            // The publisher id to use in the file name.
            string pubID = "";

            // Open the connection and read data into the DataReader.
            connection.Open();
            SqlDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess);

            while (reader.Read())
            {
                // Get the publisher id, which must occur before getting the logo.
                pubID = reader.GetString(0);

                // Create a file to hold the output.
                stream = new MemoryStream();
                writer = new BinaryWriter(stream);

                // Reset the starting byte for the new BLOB.
                startIndex = 0;

                // Read bytes into outByte[] and retain the number of bytes returned.
                retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize);

                // Continue while there are bytes beyond the size of the buffer.
                while (retval == bufferSize)
                {
                    writer.Write(outByte);
                    writer.Flush();

                    // Reposition start index to end of last buffer and fill buffer.
                    startIndex += bufferSize;
                    retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize);
                }

                // Write the remaining buffer.
                writer.Write(outByte, 0, (int)retval - 1);
                writer.Flush();

                // Close the output file.
                writer.Close();
                stream.Close();
            }

            // Close the reader and the connection.
            reader.Close();
            connection.Close();

            Image _Image = Image.FromStream(stream);





            System.Windows.Controls.Image _WPFImage = new System.Windows.Controls.Image();
            _WPFImage.Source = System.Windows.Media.Imaging.BitmapFrame.Create(stream);


    // Assumes that connection is a valid SqlConnection object.
            SqlCommand command = new SqlCommand(
              "SELECT pub_id, logo FROM pub_info", connection);

            // Writes the BLOB to a file (*.bmp).
            Stream stream;
            // Streams the BLOB to the FileStream object.
            BinaryWriter writer;

            // Size of the BLOB buffer.
            int bufferSize = 100;
            // The BLOB byte[] buffer to be filled by GetBytes.
            byte[] outByte = new byte[bufferSize];
            // The bytes returned from GetBytes.
            long retval;
            // The starting position in the BLOB output.
            long startIndex = 0;

            // The publisher id to use in the file name.
            string pubID = "";

            // Open the connection and read data into the DataReader.
            connection.Open();
            SqlDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess);

            while (reader.Read())
            {
                // Get the publisher id, which must occur before getting the logo.
                pubID = reader.GetString(0);

                // Create a file to hold the output.
                stream = new MemoryStream();
                writer = new BinaryWriter(stream);

                // Reset the starting byte for the new BLOB.
                startIndex = 0;

                // Read bytes into outByte[] and retain the number of bytes returned.
                retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize);

                // Continue while there are bytes beyond the size of the buffer.
                while (retval == bufferSize)
                {
                    writer.Write(outByte);
                    writer.Flush();

                    // Reposition start index to end of last buffer and fill buffer.
                    startIndex += bufferSize;
                    retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize);
                }

                // Write the remaining buffer.
                writer.Write(outByte, 0, (int)retval - 1);
                writer.Flush();

                // Close the output file.
                writer.Close();
                stream.Close();
            }

            // Close the reader and the connection.
            reader.Close();
            connection.Close();

            Image _Image = Image.FromStream(stream);





            System.Windows.Controls.Image _WPFImage = new System.Windows.Controls.Image();
            _WPFImage.Source = System.Windows.Media.Imaging.BitmapFrame.Create(stream);
于 2012-07-29T04:31:59.193 回答