c# 命令行操作数据库并将数据导出到csv
2017-09-12 17:03
1551 查看
记录一下,方便自己下次使用也总结一下让自己彻底理解
先上主体代码,然后我会一点点开始解释:
Appconfig
要操作数据库首先要引入这两个
先说PETable
为了将数据转为DataTable 存储,方便导出csv.
使用dataTable也要加
获取appconfig里的服务器链接地址
new SqlConnection 是new 一个sql链接
然后sConn.Open(); 打开数据库连接
DataSet
DataSet类是ADO.NET中最核心的成员之一,每一个DataSet都有很多个DataTables和Relationships。每一个DataTable都有很多datarows和datacols, 也包括ParentRelations,ChildRelations 和一些限制条件像主键不可以重复的限制。
DataSet每一行有一个RowState属性。主要是反映当前行是否已经被删掉了,被更新了,还是本没变。有如下的几个选项: Deleted, Modified, New, and Unchanged。
对DataSet的任何操作,都是在计算机缓存中完成的。
在从数据库完成数据抽取后,DataSet就是数据的存放地,它是各种数据源中的数据在计算机内存中映射成的缓存,所以有时说DataSet可以看成是一个数据容器。
DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。
DataSet使用方法一般有三种:
1.把数据库中的数据通过DataAdapter对象填充DataSet
DataAdapter填充DataSet的过程分为二步:首先通过DataAdapter的SqlCommand属性从数据库中检索出需要的数据。SqlCommand其实是一个Command对象。然后再通过DataAdapter的Fill方法把检索来的数据填充DataSet。
2.通过DataAdapter对象操作DataSet实现更新数据库
DataAdapter是通过其Update方法实现以DataSet中数据来更新数据库的。当DataSet实例中包含数据发生更改后,此时调用Update方法,DataAdapter 将分析已作出的更改并执行相应的命令(INSERT、UPDATE 或 DELETE),并以此命令来更新数据库中的数据。
把XML数据流或文本加载到DataSet
DataSet中的数据可以从XML数据流或文档创建。加载XML数据流和文档到DataSet中是可使用DataSet对象的ReadXml方法。
数据绑定分成二类:简单型数据绑定和复杂型数据绑定。适用于简单型数据绑定组件一般有Lable、TextBox等,适用于复杂性数据绑定的组件一般有DataGrid、ListBox、ComboBox等。
简单型数据绑定一般使用这些组件中的DataBindings属性的Add方法把DataSet中某一个DataTable中的某一行和组件的某个属性绑定起来,从而达到显示数据的效果。
比如:textBox1.DataBindings.Add ( “Text” , dsDataSet1, ” Customers. CustomerID “) ;
复杂性数据绑定一般是设定组件的DataSource属性和DisplayMember属性来完成数据绑定的。DataSource属性值一般设定为要绑定的DataSet,DisplayMember属性值一般设定为要绑定的数据表或数据表中的某一列。
比如:dataGrid1.DataSource = dsDataSet1 ;
dataGrid1.DataMember = ” Customers ” ;
DataSet的属性Tables可以获取该DATASET中表的数量:DataSet.Tables.Count
DataSet的Tables是一个Table数组,指定其中的一个表:DataSet.Tables[i];//i为
Table在数组序列中的位置 或 DataSet.Tables[“表名”];
通过Table的Rows对象组的Count获取该表的记录数:DataSet.Tables[i].Rows.Count;
获取列数:DataSet.Tables[i].Columns.Count;
我们想要操作文件一般如下:
首先介绍下FileStream和File的区别
例如,我们要读取一个很大的文件,然后将文件的内容通过控制台打印出来。
一、读取文件
FileStream 类只能处理原始字节(raw byte)。FileStream 类可以用于任何数据文件,而不仅仅是文本文件。FileStream 对象可以用于读取诸如图像和声音的文件,FileStream读取出来的是字节数组,然后通过编码转换将字节数组转换成字符串。
声明一个FileStream类的对象
参数:
源代码地址:
http://download.csdn.net/download/qq_34117170/9975411
先上主体代码,然后我会一点点开始解释:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.IO; namespace sqlQuery { class Program { static void Main(string[] args) { string fileName = "E:\\wdltest\\createcsv\\wdll.csv"; SaveCSV(PETable(), fileName); } private static string GetPath(string fileName) { return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "sql", fileName); } public static DataTable PETable(){ //定义连接字符串 string connString = ConfigurationManager.ConnectionStrings["db_conn"].ConnectionString; SqlConnection sConn = new SqlConnection(connString); DataSet dtSet = new DataSet(); DataSet dtSetEnd = new DataSet(); try { sConn.Open(); } catch (Exception ex) { Console.WriteLine("连接错误:" + ex.Message); } //read users string[] users = File.ReadLines(GetPath("users.txt")).ToArray(); string users_string = "'" + string.Join("','", users) + "'"; //set sqlquery string sql = File.ReadAllText(GetPath("s1.sql")); sql = sql.Replace("{USERS}", users_string); SqlCommand sCmd = new SqlCommand(sql, sConn); SqlDataAdapter sqlAdapter = new SqlDataAdapter(sCmd); sqlAdapter.Fill(dtSet); //start update string Tupdate = File.ReadAllText(GetPath("update.sql")); Tupdate = Tupdate.Replace("{USERS}", users_string); SqlCommand sUpdate = new SqlCommand(Tupdate, sConn); int effectedRows = sUpdate.ExecuteNonQuery(); Console.WriteLine("update end"); //updateAfterQuery string updateAfterQuery = File.ReadAllText(GetPath("updateAfter.sql")); updateAfterQuery = updateAfterQuery.Replace("{USERS}", users_string); SqlCommand sCmdUpdateAfter = new SqlCommand(updateAfterQuery, sConn); SqlDataAdapter sqlFinallyUpdate = new SqlDataAdapter(sCmdUpdateAfter); sqlFinallyUpdate.Fill(dtSetEnd); return dtSetEnd.Tables[0]; } public static void SaveCSV(DataTable dt, string fileName) { FileStream fs = new FileStream(fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write);//读取文件,fileMode类型为Create即先删除后新建,fileAccess权限为写 StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);//转下编码 string data = ""; //write colData for (int i = 0; i < dt.Columns.Count; i++) { data += dt.Columns[i].ColumnName.ToString(); if (i < dt.Columns.Count - 1) { data += ","; } } sw.WriteLine(data); //weite RowData if (dt.Rows.Count>0) { Console.WriteLine("start write rows data"); for (int i = 0; i < dt.Rows.Count; i++) { data = ""; for (int j = 0; j < dt.Columns.Count; j++) { data += dt.Rows[i][j].ToString()==""?"null": dt.Rows[i][j].ToString(); if (j < dt.Columns.Count - 1) { data += ","; } } sw.WriteLine(data); } } else { Console.WriteLine("data empty"); } sw.Close(); fs.Close(); Console.WriteLine("End ALl"); Console.ReadKey(); } } }
Appconfig
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> <connectionStrings> <add name="db_conn" connectionString="server=.;database=wdl;uid=wdl;pwd=123456;MultipleActiveResultSets=true" /> </connectionStrings> </configuration>
要操作数据库首先要引入这两个
using System.Data; using System.Data.SqlClient;
先说PETable
为了将数据转为DataTable 存储,方便导出csv.
使用dataTable也要加
using System.Data;//前面已经加过
获取appconfig里的服务器链接地址
string connString = ConfigurationManager.ConnectionStrings["db_conn"].ConnectionString;
new SqlConnection 是new 一个sql链接
然后sConn.Open(); 打开数据库连接
DataSet
DataSet类是ADO.NET中最核心的成员之一,每一个DataSet都有很多个DataTables和Relationships。每一个DataTable都有很多datarows和datacols, 也包括ParentRelations,ChildRelations 和一些限制条件像主键不可以重复的限制。
DataSet每一行有一个RowState属性。主要是反映当前行是否已经被删掉了,被更新了,还是本没变。有如下的几个选项: Deleted, Modified, New, and Unchanged。
对DataSet的任何操作,都是在计算机缓存中完成的。
在从数据库完成数据抽取后,DataSet就是数据的存放地,它是各种数据源中的数据在计算机内存中映射成的缓存,所以有时说DataSet可以看成是一个数据容器。
DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。
DataSet使用方法一般有三种:
1.把数据库中的数据通过DataAdapter对象填充DataSet
DataAdapter填充DataSet的过程分为二步:首先通过DataAdapter的SqlCommand属性从数据库中检索出需要的数据。SqlCommand其实是一个Command对象。然后再通过DataAdapter的Fill方法把检索来的数据填充DataSet。
2.通过DataAdapter对象操作DataSet实现更新数据库
DataAdapter是通过其Update方法实现以DataSet中数据来更新数据库的。当DataSet实例中包含数据发生更改后,此时调用Update方法,DataAdapter 将分析已作出的更改并执行相应的命令(INSERT、UPDATE 或 DELETE),并以此命令来更新数据库中的数据。
把XML数据流或文本加载到DataSet
DataSet中的数据可以从XML数据流或文档创建。加载XML数据流和文档到DataSet中是可使用DataSet对象的ReadXml方法。
数据绑定分成二类:简单型数据绑定和复杂型数据绑定。适用于简单型数据绑定组件一般有Lable、TextBox等,适用于复杂性数据绑定的组件一般有DataGrid、ListBox、ComboBox等。
简单型数据绑定一般使用这些组件中的DataBindings属性的Add方法把DataSet中某一个DataTable中的某一行和组件的某个属性绑定起来,从而达到显示数据的效果。
比如:textBox1.DataBindings.Add ( “Text” , dsDataSet1, ” Customers. CustomerID “) ;
复杂性数据绑定一般是设定组件的DataSource属性和DisplayMember属性来完成数据绑定的。DataSource属性值一般设定为要绑定的DataSet,DisplayMember属性值一般设定为要绑定的数据表或数据表中的某一列。
比如:dataGrid1.DataSource = dsDataSet1 ;
dataGrid1.DataMember = ” Customers ” ;
DataSet的属性Tables可以获取该DATASET中表的数量:DataSet.Tables.Count
DataSet的Tables是一个Table数组,指定其中的一个表:DataSet.Tables[i];//i为
Table在数组序列中的位置 或 DataSet.Tables[“表名”];
通过Table的Rows对象组的Count获取该表的记录数:DataSet.Tables[i].Rows.Count;
获取列数:DataSet.Tables[i].Columns.Count;
我们想要操作文件一般如下:
引用命名空间 using System.IO;
首先介绍下FileStream和File的区别
例如,我们要读取一个很大的文件,然后将文件的内容通过控制台打印出来。
File:将文件一下子全部读出来,然后打印到控制台。 File:缺点:消耗内存比较大
FileStream:先读一点文件,然后打印到控制台,再继续读一点文件,再打印到控制台,如此循环,直到读完为止。 FileStream优点:消耗内存比较小
一、读取文件
FileStream 类只能处理原始字节(raw byte)。FileStream 类可以用于任何数据文件,而不仅仅是文本文件。FileStream 对象可以用于读取诸如图像和声音的文件,FileStream读取出来的是字节数组,然后通过编码转换将字节数组转换成字符串。
声明一个FileStream类的对象
FileStream fsRead = new FileStream(string path, FileMode mode, FileAccess access);
参数:
path:要操作的文件路径,路径可以是绝对路径或者相对路径。 mode:操作文件的方式,打开或者创建//FileMode.Create;Open http://blog.csdn.net/laoniu541292552/article/details/8072180 access:操作文件中的数据,读取或者写入//Read打开文件,用于只读;Write打开文件,用于只写;ReadWrite打开文件,用于读写 FileStream.Read(byte[] array, int offset, int count)方法是从文件中读取数据,再把数据写入一个字节数组 参数: array:用来存储FileStrem对象读取到的数据 offse:开始读取数据的位置,通常都是0 count:表示从文件中读取多少字节
源代码地址:
http://download.csdn.net/download/qq_34117170/9975411
相关文章推荐
- c#操作xml文件与数据库配合进行数据导入导出
- C#从数据库导出数据到CSV
- 使用PL/SQL Developer工具来实现创建表空间、创建数据库、备份数据库、数据导出等操作
- 从数据库中导出csv数据,并压缩成zip下载
- C#将gridcontrol中的数据导出到.csv文件
- C#导出数据到CSV和EXCEL文件时,过长的数值被转义的解决方法
- [转]asp.net导出Excel/Csv格式数据最优方案(C#)
- mysql客户端的导出数据库表和数据库数据等相关操作
- 用exp_imp远程操作数据库,附帶Oracle数据导入导出imp/exp詳解
- jquery+ajax+C#实现无刷新操作数据库数据的简单实例
- 如何将C#中将TextBox的数据以及从数据库中查询得到的数据导出到Excel中
- Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
- asp.net导出Excel/Csv格式数据最优方案(C#)
- C#导出数据到CSV和EXCEL文件时,过长的数值被转义的解决方法
- ORACLE数据导入导出后新数据库中某些表添加操作报错[ORA-12899]
- 用exp_imp远程操作数据库,附帶Oracle数据导入导出imp/exp詳解
- C# 操作EXCEL(C#中的数据导出EXCEL)
- 操作 POI 从数据库导出数据到excel表格
- Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作-------sql方式
- C# 操作数据导出到Excel遇到的一个小问题