您的位置:首页 > 博客中心 > 数据库 >

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

时间:2022-03-10 17:16

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);
            }
        }

 

C#:向SqlServer数据库中插入imange类型,布布扣,bubuko.com

热门排行

今日推荐

热门手游