C#:向SqlServer数据库中插入imange类型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;

namespace Common
{
    public class ConvertData
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        public ConvertData()
        {

        }

        /// <summary>
        /// 将byte[]数组转换为double[]数组
        /// </summary>
        /// <param name="b"></param>
        /// <returns></returns>
        public double[]  BytesToDoubles(byte[] b)
        {
            // Initialize unmanged memory to hold the array.
            int size = Marshal.SizeOf(b[0]) * b.Length;

            IntPtr pnt = Marshal.AllocHGlobal(size);

            try
            {
                // Copy the array to unmanaged memory.
                Marshal.Copy(b, 0, pnt, b.Length);

                // Copy the unmanaged array back to another managed array.
                double[] managedArray2  = new double[b.Length / 8];

                Marshal.Copy(pnt, managedArray2, 0, b.Length / 8);
                return managedArray2;
            }
            finally
            {
                // Free the unmanaged memory.
                Marshal.FreeHGlobal(pnt);
            }

        }

        /// <summary>
        /// 获取内存中double[],并转换为String字符串
        /// </summary>
        /// <param name="b"></param>
        /// <returns></returns>
        public string DoublesToString(double[] doubleArray)
        {
            string values = "";
           
            for (int i = 0; i < doubleArray.Length; i++)
            {
                values += doubleArray[i] + ",";
            }
           
            return values;
        }

        /// <summary>
        /// 获取内存中double[],并转换为String字符串
        /// </summary>
        /// <param name="b"></param>
        /// <returns></returns>
        public string BytesToString(byte[] b)
        {
            double[] doubleArray = BytesToDoubles(b);
           
            return DoublesToString(doubleArray);
           
        }

        /// <summary>
        /// 获取内存中double[],并转换为String字符串
        /// </summary>
        /// <param name="b"></param>
        /// <returns></returns>
        public string GetByteToDouble(byte[] b)
        {
            // Initialize unmanged memory to hold the array.
            int size = Marshal.SizeOf(b[0]) * b.Length;

            IntPtr pnt = Marshal.AllocHGlobal(size);
            string values = "";
            try
            {
                // Copy the array to unmanaged memory.
                Marshal.Copy(b, 0, pnt, b.Length);

                // Copy the unmanaged array back to another managed array.
                double[] managedArray2 = new double[b.Length / 8];

                Marshal.Copy(pnt, managedArray2, 0, b.Length / 8);

                for (int i = 0; i < managedArray2.Length; i++)
                {
                    values += managedArray2[i] + ",";
                }
            }
            finally
            {
                // Free the unmanaged memory.
                Marshal.FreeHGlobal(pnt);
            }

            return values;
        }


        /// <summary>
        /// 将double[]数组转换为byte[]数组
        /// </summary>
        /// <param name="d"></param>
        /// <returns></returns>
        public byte[] DoublesToBytes(double[] d)
        {
            int size = Marshal.SizeOf(d[0]) * d.Length;
            IntPtr pnt = Marshal.AllocHGlobal(size);
            try
            {
                // Copy the array to unmanaged memory.
                Marshal.Copy(d, 0, pnt, d.Length);

                // Copy the unmanaged array back to another managed array.
                byte[] managedArray2 = new byte[d.Length * 8];

                Marshal.Copy(pnt, managedArray2, 0, d.Length * 8);
                return managedArray2;
            }
            finally
            {
                // Free the unmanaged memory.
                Marshal.FreeHGlobal(pnt);
            }
        }

    }
}

调用:

 public int InsertWSWSUH(string wscd, int uintv, int udrp, string unitnm, int usteps, double[] uhdata, double mfp,/*datetime,*/int nsteps) //// <param name="datetime">时间戳</param>
        {

            string sqlStr = "Insert into [HyModelDB_new].[dbo].[FFM_WSWSUH_B] ([WSCD],[UINTV],[UDRP],[UNITNM] ,[USTEPS] ,[UHDATA],[MFP],[DATETM],[NSTEPS])  values ('" + wscd + "'," + uintv + "," + udrp + ",'" + unitnm + "'," + usteps + "," + "@unitData" + "," + mfp + "," + "@dateTime" + "," + nsteps + ")";
            
            SqlParameter[] parameters = {
                    new SqlParameter("@unitData", SqlDbType.Image),
                    new SqlParameter("@dateTime", SqlDbType.DateTime)};

            parameters[0].Value = ConvertData.DoublesToBytes(uhdata);
            parameters[1].Value = DateTime.Now.ToString("yyyy-MM-dd");
            return db.ExecuteSql(sqlStr);
        }

参考代码:

/// <summary>
		/// 增加一条数据
		/// </summary>
		public int Add(OA.Model.InformationOfDoc model)
		{
			StringBuilder strSql=new StringBuilder();
			strSql.Append("insert into InformationOfDoc(");
			strSql.Append("DocName,DocType,RwID,RWType,RWClass,Execution,DocBLOB,DocAttribute,CreateYMD,Remark)");
			strSql.Append(" values (");
			strSql.Append("@DocName,@DocType,@RwID,@RWType,@RWClass,@Execution,@DocBLOB,@DocAttribute,@CreateYMD,@Remark)");
			strSql.Append(";select @@IDENTITY");
			SqlParameter[] parameters = {
					new SqlParameter("@DocName", SqlDbType.VarChar,40),
					new SqlParameter("@DocType", SqlDbType.VarChar,100),
					new SqlParameter("@RwID", SqlDbType.VarChar,18),
					new SqlParameter("@RWType", SqlDbType.Char,10),
					new SqlParameter("@RWClass", SqlDbType.Char,4),
					new SqlParameter("@Execution", SqlDbType.Char,6),
					new SqlParameter("@DocBLOB", SqlDbType.Image),
					new SqlParameter("@DocAttribute", SqlDbType.Char,6),
					new SqlParameter("@CreateYMD", SqlDbType.Date,3),
					new SqlParameter("@Remark", SqlDbType.VarChar,200)};
			parameters[0].Value = model.DocName;
			parameters[1].Value = model.DocType;
			parameters[2].Value = model.RwID;
			parameters[3].Value = model.RWType;
			parameters[4].Value = model.RWClass;
			parameters[5].Value = model.Execution;
			parameters[6].Value = model.DocBLOB;
			parameters[7].Value = model.DocAttribute;
			parameters[8].Value = model.CreateYMD;
			parameters[9].Value = model.Remark;

			object obj = DbHelperSQL.GetSingle(strSql.ToString(),parameters);
			if (obj == null)
			{
				return 0;
			}
			else
			{
				return Convert.ToInt32(obj);
			}
		}
原文地址:https://www.cnblogs.com/shenchao/p/3739568.html