2015-11-27 37 views

回答

1

這裏是我以前做的代碼。

根據需要,你會通過查看你的數據庫在Microsoft Management Studio中的設計使用表修改這個代碼:

mms

public static void InsertImage(int inventoryID, int businessID, FileInfo file, string sqlConnection) 
{ 
    var list = new List<byte>(); 
    using (var stream = file.Open(FileMode.Open)) 
    { 
     var data = new byte[stream.Length]; 
     stream.Read(data, 0, data.Length); 
     list.AddRange(data); 
    } 
    var bmp = System.Drawing.Image.FromFile(file.FullName, true); 
    using (var conn = new SqlConnection(sqlConnection)) 
    { 
     conn.Open(); 
     var imageId = -1; 
     var sqlSelect = "SELECT [ImageId] FROM [dbo].[ImageTable] WHERE [InventoryId][email protected];"; 
     using (var cmd = new SqlCommand(sqlSelect, conn)) 
     { 
      cmd.Parameters.Add("@InventoryId", System.Data.SqlDbType.Int).Value = inventoryID; 
      using (var r = cmd.ExecuteReader()) 
      { 
       if (r.Read()) 
       { 
        var o = r["ImageId"]; 
        if ((o != null) && (o != DBNull.Value)) 
        { 
         imageId = (int)o; 
        } 
       } 
      } 
     } 
     if (imageId == -1) 
     { 
      var sqlCmd = "INSERT INTO [dbo].[ImageTable] " + 
       "([InventoryId], [ImageFileName], [ImageSize], [ImageWidth], [ImageHeight], [ImageBytes]) " + 
       "VALUES " + 
       "(@InventoryId, @ImageFileName, @ImageSize, @ImageWidth, @ImageHeight, @ImageBytes); "; 
      using (var cmd = new SqlCommand(sqlCmd, conn)) 
      { 
       cmd.Parameters.Add("@InventoryId", System.Data.SqlDbType.Int).Value = inventoryID; 
       cmd.Parameters.Add("@ImageFileName", System.Data.SqlDbType.VarChar, 255).Value = file.Name; 
       cmd.Parameters.Add("@ImageSize", System.Data.SqlDbType.Int).Value = list.Count; 
       cmd.Parameters.Add("@ImageWidth", System.Data.SqlDbType.SmallInt).Value = bmp.Width; 
       cmd.Parameters.Add("@ImageHeight", System.Data.SqlDbType.SmallInt).Value = bmp.Height; 
       cmd.Parameters.Add("@ImageBytes", System.Data.SqlDbType.VarBinary, -1).Value = list.ToArray(); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 
} 

要運行/測試代碼,我創造了這個helper方法:

public static string[] GetImages(string fullFolderPath, string searchPattern) 
{ 
    var list = new List<String>(); 
    if (Directory.Exists(fullFolderPath)) 
    { 
     if (String.IsNullOrEmpty(searchPattern)) 
     { 
      searchPattern = "*.jpg"; 
     } 
     var dir = new DirectoryInfo(fullFolderPath); 
     var files = dir.GetFiles(searchPattern); 
     for (int i = 0; i < files.Length; i++) 
     { 
      InsertImage(i + 1, 1, files[i], _sqlConnection); 
      list.Add(files[i].FullName); 
     } 
    } 
    return list.ToArray(); 
} 

現在,從我的控制檯應用程序運行它是一個簡單的,單一的呼叫:

static void Main(string[] args) 
{ 
    var list = GetImages(@"C:\inetpub\wwwroot\Ads", "*.jpg"); 
}