C#做小工具的时候碰到的问题
winform
一、cmd.ExcuteNonQuery()产生Connection must be valid and open.的问题
MySqlCommand cmd = new MySqlCommand(cmdString,cnn);cnn是MySqlConnection类型的参数,不能丢
二、在dgv中活动鼠标所选中单元格的列名
this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText
三、MySQL的数据库操作
1、读取
string constructorString = "server=localhost;port=3306;user=root;password=000000;Database=managesys";MySqlConnection myConnnect = new MySqlConnection(constructorString);myConnnect.Open();MySqlCommand myCmd = new MySqlCommand("select*from student", myConnnect);Console.WriteLine(myCmd.CommandText);MySqlDataReader reader = myCmd.ExecuteReader();while(reader.Read()!=false){for(int i = 0; i < 6; i++){MessageBox.Show(reader[i].ToString());}//一次读一格}myCmd.Dispose();myConnnect.Close()2、其他指令string constructorString = "server=localhost;port=3306;user=root;password=000000;Database=managesys";MySqlConnection myConnnect = new MySqlConnection(constructorString);myConnnect.Open();MySqlCommand myCmd = new MySqlCommand("alter table student drop column address", myConnnect);Console.WriteLine(myCmd.CommandText);myCmd.ExcuteNonQuery();myCmd.Dispose();myConnect.Close();
四、读取datagridview中空的cell时会报未指定对象
先用if(datagridview.Rows[index].Cells[index2].Value == null)判断
如果是空的,就向要导出的字符串数组中赋值“ ”
如果非空就赋值datagridview.Rows[index].Cells[index2].Value.ToString();
MySQL的unique约束
MySQL单列UNIQUE约束在列后声明:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
)
命名约束并且添加多个UNIQUE
CREATE TABLE Persons(P_Id int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName))
添加约束
ALTER TABLE PersonsADD UNIQUE (P_Id)
如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
撤销 UNIQUE 约束
如需撤销 UNIQUE 约束,请使用下面的 SQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access:ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
用OleDB来读取Excel
项目需要我读取一个Excel表格,网上的方法就是将Excel作为数据源,使用OleDB读取。
按我的了解,OleDB是一个用于数据处理的接口,它位于ODBC上层,应用程序下层,可以用来读取和操作包括但不止于数据库的多种数据源。
以下是网上的方法:
把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下:
public DataSet ExcelToDS(string Path)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = null;
strExcel="select * from [sheet1$]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
ds = new DataSet();
myCommand.Fill(ds,"table1");
return ds;
}
//对于EXCEL中的表即sheet([sheet1$])如果不是固定的可以使用下面的方法得到 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,null);
string tableName=schemaTable.Rows[0][2].ToString().Trim();
这个方法的返回值是DataSet,它是一个数据集合,保存读取到的数据,类似一个独立的小数据库,里面有DataTable这种表,也有行列的概念
介绍原贴参考https://blog.csdn.net/liucherish/article/details/52808173对于不同的.net数据提供者,ADO.NET采用不同的Connection对象连接数据库。
Connection类有四种:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection。
OleDbConneetion连接支持OLE DB的数据库,如Access
详情见https://www.cnblogs.com/vaevvaev/p/6873367.htmlADO.Net的数据访问对象有Connection,Command、DataReader和DataAdaper等
OLEDB.NET数据提供程序的命名空间是System.Data.OleDb,用之前要using一下- 使用OleDbConnection类的对象标识与一个数据库的物理连接,DataSource 获取数据源的服务器名或文件名 ,Provider 获取在连接字符串的“Provider = ” 子句中指定的OLEDB提供程序的名称,Extend Properties是扩展属性
- DataAdapter表示一组 SQL 命令和一个数据库连接,它们用于填充 DataSet和更新数据源,Fill方法填充DataSet
- 例子上写的一个4.0版本和一个8.0版本是老式的xls,如果要用新版xlsx,就要改成Ace.OLEDB.12.0和12.0(运行估计会报错,搜索报的错去加装驱动和修改IIS就行)
- 那个select * from [sheet1$ ]是跑不出来的,那个sheet1改成你表的名字,比如[myTable$A15:N34],A15:N34是选取范围,系统会自动把第一行当成列名
另外:也可进行写入EXCEL文件,实例如下:(我没跑过)
public void DSToExcel(string Path,DataSet oldds)
{
//先得到汇总EXCEL的DataSet 主要目的是获得EXCEL在DataSet中的结构
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source ="+path1+";Extended Properties=Excel 8.0" ;
OleDbConnection myConn = new OleDbConnection(strCon) ;
string strCom="select * from [Sheet1$]";
myConn.Open ( ) ;
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom, myConn ) ;
ystem.Data.OleDb.OleDbCommandBuilder builder=new OleDbCommandBuilder(myCommand);
//QuotePrefix和QuoteSuffix主要是对builder生成InsertComment命令时使用。
builder.QuotePrefix="["; //获取insert语句中保留字符(起始位置)
builder.QuoteSuffix="]"; //获取insert语句中保留字符(结束位置)
DataSet newds=new DataSet();
myCommand.Fill(newds ,"Table1") ;
for(int i=0;i<oldds.Tables[0].Rows.Count;i++)
{
//在这里不能使用ImportRow方法将一行导入到news中,因为ImportRow将保留原来DataRow的所有设置(DataRowState状态不变)。在使用ImportRow后newds内有值,但不能更新到Excel中因为所有导入行的DataRowState!=Added
DataRow nrow=aDataSet.Tables["Table1"].NewRow();
for(int j=0;j<newds.Tables[0].Columns.Count;j++)
{ nrow[j]=oldds.Tables[0].Rows[i][j];
}
newds.Tables["Table1"].Rows.Add(nrow);
}
myCommand.Update(newds,"Table1");
myConn.Close();
}
List的操作
一、addRange(List list2)方法,可以把其他的集合拼到本List的末尾
二、将List<string>中的字符串用逗号拼接成一个长字符串
利用string[] 类型的join()方法.
string strTemp1 = string.Join(",", list.ToArray());
MySQL的Insert into
MySql不支持select into语句
但是它有 insert into table_name1
select column_names from table_name2;
select into会自动创建新表
insert into需要一个已存在的表
两者的主要区别为: select into from 要求目标表不存在,因为在插入时会自动创建;insert into select from 要求目标表存在。
1.复制表结构及其数据:
create table table_name_new as select * from table_name_old
2.只复制表结构:
create table table_name_new as select * from table_name_old where 1=2;
或者:create table table_name_new like table_name_old
3.只复制表数据:
如果两个表结构一样:
insert into table_name_new select * from table_name_old
如果两个表结构不一样:
insert into table_name_new(column1,column2…) select column1,column2… from table_name_old
concat和加号的使用注意
concat(col1,col2)函数可将几列的内容拼接在一起
注意!使用concat的时候,如果有一列的值是空值,拼出来的结果也是空值
使用加法计算数字时,如果有一列的值是null,结果就是null
用case when 和IFNULL解决 读取数据库时读取到的某单元格为null的情况
case when语句与IFNULL函数
- case when middle_exercise_frequency is null then 0 else 1 end
s null也可以替换成 =1 =100 =5050等等条件
意思是,middle_exercise_frequency是null的时候,这句的值是0,否则是1 - 相似可以判断是否为空的方法是IFNULL(exp1,exp2) 如果exp1非空,式子的值就是exp1的值,否则是exp2的值
- 上面两个其实可以很好地解决一、二的问题,比如将concat和‘+‘运算的表达式更换为’’IFNULL(exp,‘defalutvalue’),来保证计算结果不会空值,case when同理
例如
select id,concat(IFNULL(light_exercise_type,'defaultvalue'),',',IFNULL(middle_exercise_type,'defaultvalue'),',',IFNULL(heavy_exercise_type,'defaultvalue')) as aero_type, (IFNULL(light_exercise_frequency,0) +IFNULL(middle_exercise_frequency,0) +IFNULL(heavy_exercise_frequency,0)) /((case when light_exercise_frequency is null then 0 else 1 end) +(case when middle_exercise_frequency is null then 0 else 1 end) +(case when heavy_exercise_frequency is null then 0 else 1 end) ) as aere_freq FROM tb_questionnaire_activity_habit GROUP BY id
查看表的列名及确定表中是否存在某列,不存在就增加该列
查询表的列名是否有目标列
select COLUMN_NAME from information_schema.COLUMNS
where table_name = 'tb_name' and COLUMN_NAME = 'column_name';
如果不存在,就增加该列
一开始在写这个逻辑的时候在网上找了一万个帖子,都是用if not exists(select…),但是MySql根本跑不出来啊!然后每个数据库存放表信息的位置也不一样,MySql的就在information_schema里,所以不是网上代码都能用。。
C#做小工具的时候碰到的问题相关推荐
- 用Python做小工具——精简blf文件
软件背景 做汽车开发工作的应该大部分都知道 BLF (Binary Logging Format)文件.它是由Vector公司定义的用于记录总线数据的一种文件格式.在汽车开发的过程中,可能我们要录一段 ...
- 【移动端debug-6】如何做一个App里的web调试小工具
原文链接:如何做一个App里的web调试小工具 我们知道现在hybrid app非常流行,在这样的app里,h5页面是应用非常广泛的.相对于以往在pc端开发的网页,放在app里的网页由于无法直接使用桌 ...
- 做了一个阿里云MQTT单片机编程小工具
做了一个阿里云MQTT单片机编程小工具,点击测试http://www.norra.cn:9091/ 传感云是采集.传输.存储.可视化.接口.APP.微信一体的传感器与应用服务平台,支持多种模式 ...
- 我用python做了个测词汇量的小工具
大家好,作为爱学习的自己,我特意用python做了个测词汇量的小工具,让自己每天都能够快乐的学习! 1.页面分析 这次我们采用的是扇贝网来进行词汇量测试,如图: 我们还是老规矩,首先按F12打开开发者 ...
- java-利用反射做一个将javabean对象转为json的小工具(v1)
java-利用反射做一个将javabean对象转为json字符串的小工具(v1) 解决思路 1 利用反射机制获取对象的所有字段 2 遍历,将字段名和值按照一定格式添加到字符串中 所需知识 1 反射基础 ...
- 学习记录贴:上班摸鱼做一个看lol文字直播的小工具
学习记录贴:上班摸鱼做一个看lol文字直播的小工具 前言 运行图 流程及思路 项目及代码 总结 前言 本人纯新手小白,上班练手. 致谢: 基于Python命令行的NBA文字直播小工具. 运行图 流程及 ...
- 我用Python + PAGE(Tkinter GUI) + pandas做了个企查查导出模板转机器人模板的小工具
产品需求 企查查导出的Excel文件是这样的 客户的机器人软件需要导入的模板是这样的 简单说就是要做个小工具将企查查导出的Excel通过pandas分析整理后按照客户给出的模板表头生成新的Excel文 ...
- 从零开始自制实现WebServer(十八)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章
文章目录 全流程实现博客链接 前引 (十八)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章 1.正确处理Vmware-Station 处理器设置(初步调试过程) 2.正确 ...
- 用Python做一个房价预测小工具!
哈喽,大家好. 今天给大家介绍一个非常适合新手入门的机器学习实战案例. 这是一个房价预测的案例,来源于 Kaggle 网站,是很多算法初学者的第一道竞赛题目. 该案例有着解机器学习问题的完整流程,包含 ...
- 怎么用python做一个解压缩小工具,以后再也不用下载各种格式的解压缩软件了...
经常由于各种压缩格式的不一样用到文件的解压缩时就需要下载不同的解压缩工具去处理不同的文件,以至于桌面上的压缩工具就有三四种,于是使用python做了一个包含各种常见格式的文件解压缩的小工具. 阅读全文 ...
最新文章
- arcgis api for JavaScript _跨域请求
- 思考Web应用的数据流
- Windows上部署Ngnix
- 边开飞机边换引擎?我们造了个新功能保障业务流量无损迁移
- 使用轮转算法求时间片_彩票调度算法,让进程们拼手气? --当操作系统遇上随机算法...
- C++ STL的妙用
- 接软件开发项目,你需要知道这些!
- spring mvc controller间跳转 重定向 传参
- 数学一年级应用题_【专项练习】一年级下册数学100以内加减法应用题专项练习,附答案...
- python19 random随机数 json模块 pickle模块 hashlib模块 hmac模块 shutil模块 shelve模块...
- Python Selenium set Chrome Preference Download Location.
- python中win32api模块_解决在Python中使用Win32api报错的问题,No module named win32api
- mac电脑投屏到小米盒子_巧用手机自带功能向电脑传无损照片视频 华为小米苹果均支持 小米盒子 苹果手机 投屏软件...
- gopher协议总结
- win10时间同步一直失败的解决办法
- 【黄啊码】微信小程序外卖项目显示骑手位置
- python之abc和six
- php中escape和unescape
- 十几套IT培训视频教程免费下载,为你节省几万元培训费用
- react中 ajax跨域请求
热门文章
- LinkedIn应用开发系列(三) --认证Request token
- 计算机如何更新苹果系统,苹果系统怎么更新_苹果电脑mac如何更新升级系统-win7之家...
- 那些消失了的黑客杂志 | 深度
- 实对称矩阵不同特征值对应的特征向量都正交
- 实对称矩阵的特征值求法_正交矩阵学习小结
- 初入行的C++程序员,如何快速摆脱CRUD阶段?
- python与vb语言_vb.net和python区别是什么
- 工业机器人(10)-Matlab Robot Toolbox机械臂工作空间
- 01、Hive数据仓库——Hive SQL练习
- Alex 的 Hadoop 菜鸟教程: 第12课 Sqoop1 安装/导入/导出教程