2015-10-07 98 views

回答

0

保存圖像的WinForm的

byte[] data = System.IO.File.ReadAllBytes(filePath); 
using(SqlCommand cm = new SqlCommand("SaveImage", connection, transaction)) 
{ 
    cm.CommandType = CommandType.StoredProcedure; 
    cm.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int,0, ParameterDirection.InputOutput, false, 10, 0, "Id", DataRowVersion.Current, (SqlInt32)instance.Id)); 
    cm.Parameters.Add(new SqlParameter("@Title", SqlDbType.NVarChar,50, ParameterDirection.Input, false, 0, 0, "Title", DataRowVersion.Current, (SqlString)instance.Title)); 
    if (instance.Data.Length > 0) 
    { 
     cm.Parameters.Add(new SqlParameter("@Data", SqlDbType.VarBinary,instance.Data.Length, ParameterDirection.Input, false, 0, 0, "Data", DataRowVersion.Current, (SqlBinary)instance.Data)); 
    } 
    else 
    { 
     cm.Parameters.Add(new SqlParameter("@Data", SqlDbType.VarBinary,0, ParameterDirection.Input, false, 0, 0, "Data", DataRowVersion.Current, DBNull.Value));      
    } 
    cm.ExecuteNonQuery(); 
} 

創建一個存儲過程

CREATE PROCEDURE SaveImage 
(
@Id int OUTPUT 
,@Title nvarchar(50) 
,@Data varbinary(MAX) 
) 
AS 
SET NOCOUNT ON 
SET XACT_ABORT ON 

IF @Id IS NULL OR @Id <= 0 
BEGIN 
SELECT @Id = ISNULL(MAX([Id]),0) + 1 FROM [dbo].[Images] 
END 

INSERT INTO [dbo].[Images] (
[Id] 
,[Title] 
,[Data] 
) VALUES (
@Id 
,@Title 
,@Data 
) 

讀裝載/保存圖像VarBinary Data

private static byte[] getImage(int EmployeeId) 
{ 
    using (SqlConnection cn = new SqlConnection("...")) 
    using (SqlCommand cm = cn.CreateCommand()) 
    { 
     cm.CommandText = @" 
      SELECT ImageData 
      FROM EmployeeTable 
      WHERE EmployeeId = @Id"; 
     cm.Parameters.AddWithValue("@Id", EmployeeId); 
     cn.Open(); 
     return cm.ExecuteScalar() as byte[]; 
    } 
} 

byte[] data = getImage("EmployeeID"); 
MemoryStream ms = new MemoryStream(data); 
EmployeeImage.Image = Image.FromStream(ms); 
+0

謝謝。它可以保存圖像。但是它在讀取二進制數據「緩衝區不能爲空參數緩衝區」時引發錯誤。 –

+0

您可以調試並查看這些值是否來自數據庫。 –

+0

是的,這是完全一樣的錯誤。現在,如何在數據爲空時停止錯誤? –