我们定义数据库为image类型,然后读取图片为字符流,再保存到数据库中,首先我们定义一个读取图片的公共类,此公共类以后会用到,所以可以建立相应的帮助类

 public static byte[] ReadFile(string sPath)
{
//Initialize byte array with a null value initially.
byte[] data = null; //Use FileInfo object to get file size.
FileInfo fInfo = new FileInfo(sPath);
long numBytes = fInfo.Length; //Open FileStream to read file
FileStream fStream = new FileStream(sPath, FileMode.Open, FileAccess.Read); //Use BinaryReader to read file stream into byte array.
BinaryReader br = new BinaryReader(fStream); //When you use BinaryReader, you need to supply number of bytes to read from file.
//In this case we want to read entire file. So supplying total number of bytes.
data = br.ReadBytes((int)numBytes);
return data;
}

  再定义一下插入图片的语句类

    /// <summary>
/// 保存图片数据库语句
/// WZW
/// 2018-10-09 17:11
/// </summary>
/// <param name="ImageData"></param>
/// <param name="BUitrasoundID"></param>
/// <param name="currentid"></param>
/// <param name="parameter"></param>
/// <returns></returns>
private StringBuilder SaveImg(byte[] ImageData, string BUitrasoundID,int currentid,out SqlParameter parameter)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into imagetabel(");
strSql.Append("ImageData,Time,Type,ImageType,ReferenceID)");
strSql.Append(" values (");
strSql.Append("@ImageData"+currentid+",'" + System.DateTime.Now + "',1,0,@BSID) ");
parameter = new SqlParameter("@ImageData" + currentid, ImageData);
return strSql; }

  主体代码如下

StringBuilder strSql = new StringBuilder();
Random random=new Random();
SqlCommand command = new SqlCommand();
SqlParameter[] parameters = new SqlParameter[3];
strSql.Append("set XACT_ABORT ON ");
strSql.Append(" begin tran t1 ");
StringBuilder strSql2 = new StringBuilder();
strSql.Append(" declare @BSID int ");
strSql2.Append("insert into table(");
strSql2.Append("ID,CheckResult,TestTime,Result,Picture,Type)");
strSql2.Append(" values (");
strSql2.Append("'" + ID + "','" +CheckResult + "','" + TestTime + "','" + FeaturesResult + "','" +BUltrasoundPicture + "','" + BUitrasoundType + "') ");
strSql2.Append(";select @BSID=@@IDENTITY ");
strSql.Append(strSql2);
if (ImageData != null)
{
SqlParameter parameter = null;
strSql.Append(SaveImg(ImageData," ",1, out parameter));
parameters[0] = parameter;
}
if (ImageData2 != null)
{
SqlParameter parameter = null;
strSql.Append(SaveImg(ImageData2, " ",2, out parameter));
parameters[1] = parameter;
}
if (ImageData3 != null)
{
SqlParameter parameter = null;
strSql.Append(SaveImg(ImageData3," ",3, out parameter));
parameters[2] = parameter;
}
strSql.Append("commit tran t1");
return Convert.ToInt32(SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, strSql.ToString(),parameters));

  其中图片表的关联id关联主表插入后的id,由语句select @BSID=@@IDENTITY得到,当主键自增时此语句才生效。

根据数据库帮助类采用事务插入图片到sql server数据库中的更多相关文章

  1. MFC存储图片到SQL Server数据库

    第一步:建立数据库表,比如:id char,pic image. 第二步:建立MFC单文档应用程序,再添加类CMyRecordset,基类选择CRecordset,导入数据库的刚建立的表. 第三步:在 ...

  2. C# 图片存入SQL Server数据库

    OpenFileDialog openfiledialog1 = new OpenFileDialog(); if (openfiledialog1.ShowDialog() == DialogRes ...

  3. 2017-3-17 SQL server 数据库 视图,事务,备份还原,分离附加

    1.视图:只能查看,不能增删改不能有重复列 create view 名字as查询语句 2.事务:保证流程的完整执行 begin tran --开始事务监控 被监控的代码 ... ...if @@ERR ...

  4. SQL Server 数据库分离与附加

    一.概述 SQL Server提供了“分离/附加”数据库.“备份/还原”数据库.复制数据库等多种数据库的备份和恢复方法.这里介绍一种学习中常用的“分离/附加”方法,类似于大家熟悉的“文件拷贝”方法,即 ...

  5. SQL Server 2012中快速插入批量数据的示例及疑惑

    SQL Server 2008中SQL应用系列--目录索引 今天在做一个案例演示时,在SQL Server 2012中使用Insert语句插入1万条数据,结果遇到了一个奇怪的现象,现将过程分享出来,以 ...

  6. JDBC连接sql server数据库的详细步骤和代码

    JDBC连接sql server数据库的详细步骤和代码 JDBC连接sql server数据库的步骤如下: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Ja ...

  7. 用分离、附加的方式实现sql server数据库的备份和还原

    一.数据库分离.附加的说明 SQL Server提供了"分离/附加"数据库."备份/还原"数据库.复制数据库等多种数据库的备份和恢复方法.这里介绍一种学习中常用 ...

  8. Amazon RDS 上的 Microsoft SQL Server » 导入和导出 SQL Server 数据库

    导入和导出 SQL Server 数据库 Amazon RDS 支持使用完整备份文件 (.bak 文件) 对 Microsoft SQL Server 数据库进行本机备份和还原.您可以在单个便携式文件 ...

  9. SQL Server 数据库分离与附加(图文教程)

    from:http://www.jb51.net/article/36624.htm 一.概述 SQL Server提供了“分离/附加”数据库.“备份/还原”数据库.复制数据库等多种数据库的备份和恢复 ...

随机推荐

  1. C#如何将十六进制数字符串转byte[]?

    代码: /// <summary> /// 16进制原码字符串转字节数组 /// </summary> /// <param name="hexString&q ...

  2. 压缩大文件时如何限制CPU使用率?----几种CPU资源限制方法的测试说明

    一.说明 我们的MySQL实例在备份后需要将数据打包压缩,部分低配机器在压缩时容易出现CPU打满导致报警的情况,需要在压缩文件时进行CPU资源的限制. 因此针对此问题进行了相关测试,就有了此文章. 二 ...

  3. 教你如何快速使用Github

    以前看过几篇github的使用教程,感觉还是不是很清晰,自从看到了这篇,通俗易懂,也学会基本的使用了,在此为大家推荐.(转自知乎,为了能让更多的人看到,请允许我使用 “原创”,如果侵权请联系.) Gi ...

  4. Tencent://Message/协议的实现原理(Windows提供协议注册)

    腾讯官方通过 Tencent://Message/协议可以让QQ用户显示QQ/TM的在线状态发布在互联网上:并且点击 XXX  ,不用加好友也可以聊天 官方链接: http://is.qq.com/w ...

  5. OpenGL与Directx的区别

    OpenGL 只是图形函数库. DirectX 包含图形, 声音, 输入, 网络等模块. 单就图形而论, DirectX 的图形库性能不如 OpenGL OpenGL稳定,可跨平台使用.但 OpenG ...

  6. FMXUI中的三大杀器:TView、TLinearLayout、TRelativeLayout

    好了,今天我们来介绍下FMXUI中的三大杀器:TView.TLinearLayout.TRelativeLayout. [名词定义] 非布局组件: 组件名不是以Layout结尾的组件,Delphi自带 ...

  7. GTest翻译词汇表

    版本号:v_0.1 词汇表 Assertion: 断言. Bug: 不翻译. Caveat: 警告. Error bound: 误差范围. Exception: 异常. Flag: 标志位. Floa ...

  8. XML转义字符 如"&"

    解析数据 XML 解析器通常情况下会处理XML文档中的所有文本. 当XML元素被解析的时候,XML元素内部的文本也会被解析,例如: <message>Hello Word!</mes ...

  9. Java基础(四) StringBuffer、StringBuilder原理浅析

    StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢? 关于String的讲解请看Java基础 ...

  10. python网络编程——实现简单聊天

    通过socket建立简单的聊天工具 server.py import socket import threading import time s = socket.socket(socket.AF_I ...