zoukankan      html  css  js  c++  java
  • 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);
    			}
    		}
    
  • 相关阅读:
    spring学习总结009 --- 重复id或name的bean定义允许覆盖allowBeanDefinitionOverriding
    spring学习总结008 --- IOC流程图
    spring学习总结007 --- IOC容器级生命周期接口
    spring学习总结006 --- Bean级生命周期接口
    spring学习总结005 --- IOC容器启动源码(事件机制)
    字体图标
    pycharm永久激活
    Linux常用命令
    Android Studio 更新后导入旧项目Bug解决
    Ubuntu更新源
  • 原文地址:https://www.cnblogs.com/shenchao/p/3739568.html
Copyright © 2011-2022 走看看