前言
之前通过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数据库的更多相关文章
-
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 ...
-
基于Winform框架DataGridView控件的SqlServer数据库查询展示功能的实现
关键词:Winform.DataGridView.SqlServer 一个基于winform框架的C/S软件,主要实现对SqlServer数据库数据表的实时查询. 一.为DataGridView添加数 ...
-
Winform访问本地SQLServer数据库文件
Winform访问本地SQLServer数据库文件 1.项目中添加config配置,如下: <configuration> <connectionStrings> <ad ...
-
使用vbScript 链接SQLserver数据库和基础操作
使用vbs链接SQLserver数据库 数据库的创建.设计使用 management studio完成 1.本地链接数据库 set oCon = server.createObject("a ...
-
Winform开发框架中实现多种数据库类型切换以及分拆数据库的支持
在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很方便支持多种数据库的切换,那可以为我们减少很多烦恼,同时提高系统的适 ...
-
Sqlserver数据库总结
由于公司项目需要这段时间一直在做有关于数据库方面的工作.趁这段时间有空,对数据库方面的知识进行一个梳理和归纳,以便以后需要时,查看起来方便. 使用的数据库主要有ORACLE10g和Sqlserver2 ...
-
基于4.5Framework web程序、SQLSERVER数据库打包
原文:基于4.5Framework web程序.SQLSERVER数据库打包 估计很多朋友和我一样,对于C/S程序打包很熟悉,但对于B/S程序打包一头雾水... 最近公司要求我们把项目和数据库(SQL ...
-
SQLServer数据库中开启CDC导致事务日志空间被占满的原因
SQLServer数据库中开启CDC导致事务日志空间被占满的原因 转载 2017-04-01 投稿:mrr 我要评论 这篇文章主要介绍了SQLServer数据库中开启CDC导致事务日志空间 ...
-
Sqlserver数据库发送邮件
目录 1. Sqlserver数据库发送邮件 1.1. 概念了解 1.2. 配置 1.3. 测试发送邮件 1.3.1. 代码测试 1.3.2. 工具测试 1.4. 查看邮件日志 1. Sqlserve ...
随机推荐
-
Android-studio开发 快捷键
这会儿正在学android开发,使用的是Android-studio 记录一下开发工具默认的 快捷键
-
MyBatis 简介
MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis ...
-
18TH赛事管理
赛事管理者 项目psp: 一.计划 估计这个任务需要7天时间 二.开发 1.需求分析 作为一个赛事管理者,我希望知道每场比赛的队伍得分和积分情况,以便给每队进行排名. 2.生成设计文档 查询出每场得分 ...
-
OpenSSL密码算法库: MD5示例小程序
OpenSSL http://www.openssl.org/ OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库.SSL协议库以及应用程序.OpenSSL 的密码算法库包含多种加密算 ...
-
ISO9126软件质量模型
ISO9126软件质量模型,是评价软件质量的国际标准.6个特性27个子特性组成. ISO/IEC9126软件质量模型是一种评价软件质量的通用模型,包括3个层次: 1.质量特性 2.质量子特性 3.度量 ...
-
Python进阶03 模块
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们之前看到了函数和对象.从本质上来说,它们都是为了更好的组织已经有的程序,以方便 ...
-
嵌入在C++程序中的extern ";C";
1.extern的作用 extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,可以告知编译器,用extern声明的函数和变量可以在本模块或其它模块中使用. 通常,在模块的头文件中 ...
-
HDU 1397 Goldbach&#39;s Conjecture【素数打表】
题意:给出n,问满足a+b=n且a,b都为素数的有多少对 将素数打表,再枚举 #include<iostream> #include<cstdio> #include<c ...
-
js获取浏览器基本信息:document.body.clientWidth/clientHeight/scrollWidth/scrollTop。(转)
js获取浏览器基本信息:document.body.clientWidth/clientHeight/scrollWidth/scrollTop. 分类: js.jquery.ext.js技术2011 ...
-
汉诺塔III 递推题
题目描述: 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动 ...