c# 命令行操作数据库并将数据导出到csv

2017-09-13 10:24:07来源:网络收集作者:咖啡不加糖人点击

分享

记录一下,方便自己下次使用也总结一下让自己彻底理解


先上主体代码,然后我会一点点开始解释:


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" ?>






要操作数据库首先要引入这两个


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




最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台