前言

之前通过winform与SQL Server的交互一直局限于文本、数字等信息,都可以通过string的方式来传输,但是比如音乐、图片等特殊格式的文件要如何与SQL Server数据库进行交互呢?

今天主要讲通过文件流的方式,将特殊文件转换成二进制,然后存储到数据库中。在实际的应用中,如果文件较大或者较多,直接存储在数据中会造成一定的压力,可以转为保存文件名,然后在实际使用的地方调用改文件名对应的文件。

主要内容

上图为图片上传winform的内容。

1、选择图片按钮,功能为通过对话框选择要上传的文件,并将该文件在下面的pictureBox中显示出来。具体代码如下:

 private void btn_Choose_Click(object sender, EventArgs e)
{
UserMethod.ShowPic(this.pictureBox1);
}
  public static void ShowPic(PictureBox picBox)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.InitialDirectory = @"E:\";
ofd.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files(*.*)|*.*";
ofd.RestoreDirectory = true; if (ofd.ShowDialog() == DialogResult.OK)
{
picAddress = ofd.FileName;
Image imge = Image.FromFile(picAddress);
Bitmap bm = new Bitmap(imge, picBox.Width, picBox.Height);
picBox.Image = bm;
}
}

ShowPic()方法为静态方法,可以直接调用,其中的picAddress变量为静态全局变量,用于记录要上传文件的文件地址。picturebox显示图片的方式,是通过pictbox的image属性设定的,将图片转成Bitmap格式,位图文件是最简单的图片格式。

2、上传图片,该按钮的功能是将选定的图片上传到数据库中,具体的实现代码如下:

  private void btn_Upload_Click(object sender, EventArgs e)
{
if (UserMethod.picAddress == null)
{
Byte[] pic = UserMethod.GetContent(UserMethod.picAddress);
string sql = "insert into tb_MyPic values(@Picture,@PicCategory)";
SqlParameter[] param = new SqlParameter[];
param[] = new SqlParameter("@Picture", pic);
param[] = new SqlParameter("@PicCategory", this.cmbCatogery.Text.Trim());
if (DataBase.getExecuteQuery(sql, param) != )
{
MessageBox.Show("添加成功!");
}
}
else
{
MessageBox.Show("请先选择图片!");
}
}
      public static string picAddress = string.Empty;
public static Byte[] GetContent(string filepath)//将指定路径下的文件转换成二进制代码,用于传输到数据库
{
FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
Byte[] byData = new Byte[fs.Length];//新建用于保存文件流的字节数组
fs.Read(byData, , byData.Length);//读取文件流
fs.Close();
return byData;
}

上传的过程大概就是:根据文件地址将对应文件转换成数据流二进制格式-->编写对应的SQL语句-->执行该SQL语句,将图片添加到数据库中。

3、使用sql Parameter[]的SQL执行方法,因为传统的sql语句对应的value终归是string或者int之类的格式,可以在sql语句中写一下,但是使用Parameter的方式可以更加简洁、明了、减少失误。具体的执行sql语句方法参考如下代码:

  public static int getExecuteQuery(string sql, SqlParameter[] param)
{
getcon();
SqlCommand sqlcom = new SqlCommand(sql, My_Conn);
sqlcom.Parameters.AddRange(param);
return sqlcom.ExecuteNonQuery();
}

OK,下次会跟大家讲一下如何从sql数据中下载图片显示到winform中来。

C#基础——winform应用上传图片到SQLServer数据库的更多相关文章

  1. Expression构建DataTable to Entity 映射委托 sqlserver 数据库里面金额类型为什么不建议用float,实例告诉你为什么不能。 sql server 多行数据合并成一列 C# 字符串大写转小写,小写转大写,数字保留,其他除外 从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法 纯CSS打造淘宝导航菜单栏 C# Winform

    Expression构建DataTable to Entity 映射委托   1 namespace Echofool.Utility.Common { 2 using System; 3 using ...

  2. 基于Winform框架DataGridView控件的SqlServer数据库查询展示功能的实现

    关键词:Winform.DataGridView.SqlServer 一个基于winform框架的C/S软件,主要实现对SqlServer数据库数据表的实时查询. 一.为DataGridView添加数 ...

  3. Winform访问本地SQLServer数据库文件

    Winform访问本地SQLServer数据库文件 1.项目中添加config配置,如下: <configuration> <connectionStrings> <ad ...

  4. 使用vbScript 链接SQLserver数据库和基础操作

    使用vbs链接SQLserver数据库 数据库的创建.设计使用 management studio完成 1.本地链接数据库 set oCon = server.createObject("a ...

  5. Winform开发框架中实现多种数据库类型切换以及分拆数据库的支持

    在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很方便支持多种数据库的切换,那可以为我们减少很多烦恼,同时提高系统的适 ...

  6. Sqlserver数据库总结

    由于公司项目需要这段时间一直在做有关于数据库方面的工作.趁这段时间有空,对数据库方面的知识进行一个梳理和归纳,以便以后需要时,查看起来方便. 使用的数据库主要有ORACLE10g和Sqlserver2 ...

  7. 基于4.5Framework web程序、SQLSERVER数据库打包

    原文:基于4.5Framework web程序.SQLSERVER数据库打包 估计很多朋友和我一样,对于C/S程序打包很熟悉,但对于B/S程序打包一头雾水... 最近公司要求我们把项目和数据库(SQL ...

  8. SQLServer数据库中开启CDC导致事务日志空间被占满的原因

    SQLServer数据库中开启CDC导致事务日志空间被占满的原因 转载  2017-04-01   投稿:mrr    我要评论 这篇文章主要介绍了SQLServer数据库中开启CDC导致事务日志空间 ...

  9. Sqlserver数据库发送邮件

    目录 1. Sqlserver数据库发送邮件 1.1. 概念了解 1.2. 配置 1.3. 测试发送邮件 1.3.1. 代码测试 1.3.2. 工具测试 1.4. 查看邮件日志 1. Sqlserve ...

随机推荐

  1. iis里面浏览网页,提示找不到应用程序的解决办法

    iis配置成功,数据库链接正确,代码无误,在iis里面,浏览某网页,提示找不到应用程序,这时一下子懵了. 处理办法:在浏览器中直接输入网址,例如:http://192.168.1.111,这时能够打开 ...

  2. UIScrollView内容缩放

    •有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理 也就是说,要完成缩放功能的话,只需要将需要缩放的内容添加到UIScr ...

  3. 非maven项目导入idea几点心得总结

    这个问题一共有3种解决办法1. 你下载好的文件应该是src 和Webcontent是在同一个目录下的.只要把Webcontent放入到src下就行.这种就变成maven的目录结构.因为你这个目录结构应 ...

  4. 运行impala tpch

    1.安装git和下载tpc-h-impala脚步 [root@ip-172-31-34-31 ~]# yum install git [root@ip-172-31-34-31 ~]# git clo ...

  5. 腾讯云服务器centos 6.5(jdk+tomcat+vsftp)、腾讯mysql数据库 及 tomcat自启动 配置教程

    1.腾讯云数据库配置 1.考虑到安全性问题,,平常不使用root用户登录,新增一个用户名neil,用来管理项目的数据库 a.首先登录root创建db_AA数据库 b.在root用户下,创建neil用户 ...

  6. hdu 1232, disjoint set, linked list vs. rooted tree, a minor but substantial optimization for path c 分类: hdoj 2015-07-16 17:13 116人阅读 评论(0) 收藏

    three version are provided. disjoint set, linked list version with weighted-union heuristic, rooted ...

  7. 利用Volley封装好的图片缓存处理加载图片

    Volley 工具箱中提供了一种通过 DiskBasedCache 类实现的标准缓存.这个类能够缓存文件到磁盘的指定目录.但是为了使用 ImageLoader,我们应该提供一个自定义的内存 LRC b ...

  8. 黑马程序员——C语言基础 指针

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)指针 首先指针是C语言中非常重要的数据类型,如果你说C语言中除了指针 ...

  9. iptables原理详解(一)

    iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火 ...

  10. 【转】File类应用 - FilenameFilter 和 FileFilter

    FilenameFilter & FileFilter FilenameFilter 和 FileFilter 都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码 ...