日笔记--C# 从数据库取表格到DataGridView---json传输
只作为个人学习笔记。
class OpData
{ // 创建一个和客户端通信的套接字
Socket socketwatch = null;
//连接Access字符串
string strCon;
OleDbConnection myCon;
public TcpListener link(NetChgbCientr.Form1.Updata ud)
{
//定义一个套接字用于监听客户端发来的消息,包含三个参数(IP4寻址协议,流式连接,Tcp协议)
socketwatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//服务端发送信息需要一个IP地址和端口号
IPAddress address = IPAddress.Parse("192.168.1.112");
TcpListener tls = new TcpListener(address, );
tls.Start();
Connect(); //连接数据库
ud("服务已启动!\n");
return tls;
} //服务启动 - - 连接数据库
public void Connect()
{
strCon = @"Provider = Microsoft.Jet.OLEDB.4.0;Data Source =
D:\project\NEWPROJECT\NetChgbServer\bin\Debug\Data2.mdb"; //地址改为全路径
//实例化连接数据库对象
myCon = new OleDbConnection(strCon);
//开启连接
myCon.Open();
} //查询全部数据json格式传个客户端
public DataSet Query(String strCom)
{
// String strCom = "SELECT * FROM CHGB";
//实例化数据集
DataSet myDataSet = new DataSet();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myCon);
myCommand.Fill(myDataSet, "CHGB");
if (myDataSet != null && myDataSet.Tables.Count > )//判断得到的是不是null或没有数据的
{
return myDataSet; }
else
{
DataSet DS = new DataSet();
return DS; }
} }
//业务逻辑
class BllData
{
TcpListener tls;
// 创建一个和客户端通信的套接字
Socket socketwatch = null;
OpData Od = new OpData();
Dictionary<string, Socket> clientConnectionItems = new Dictionary<string, Socket> { }; //启动服务器
public void Open(NetChgbCientr.Form1.Updata ud)
{
tls = Od.link(ud);
//负责监听客户端的线程:创建一个监听线程
Thread threadwatch = new Thread(watchconnecting);
threadwatch.IsBackground = true;
//启动线程
threadwatch.Start(ud); } //查询全部数据--json转换 public void QueryAll()
{
DataSet ds = new DataSet();
List<CHGB> lis = new List<CHGB>();
String strCom = "SELECT * FROM CHGB";
ds = Od.Query(strCom); //返回查询结果
//判断是不是空数据
if (ds == null || ds.Tables.Count <= || ds.Tables[].Rows.Count <= )
{
return;
}
//有数据继续往下执行
for (int i = ; i < ds.Tables.Count; i++)
{
foreach (DataRow dts in ds.Tables[i].Rows)
{
CHGB ch = new CHGB();
ch.JH1 = dts[].ToString();
ch.QSJS1 = dts[].ToString();
ch.ZZJS1 = dts[].ToString();
ch.HD1 = dts[].ToString();
ch.SB1 = dts[].ToString();
ch.SND1 = dts[].ToString();
ch.CZ1 = dts[].ToString();
ch.HD21 = dts[].ToString();
ch.JSJG1 = dts[].ToString();
lis.Add(ch);
}
}
string ja = JsonConvert.SerializeObject(lis); //json序列化,直接将取出来的表格拆分成对象存入集合中,在用下面的方法序列化
this.Send(ja);
} //监听客户端发来的请求
public void watchconnecting(object ud)
{
//tcpClient是socket的封装(tcpclient.client()方法可以得到socket
TcpClient remoteClient = null;
//持续不断监听客户端发来的请求
while (true)
{
try
{
remoteClient = tls.AcceptTcpClient();
}
catch (Exception ex)
{
//提示套接字监听异常
MessageBox.Show(ex.Message);
break;
} //获取客户端的IP和端口号
IPAddress IP = (remoteClient.Client.RemoteEndPoint as IPEndPoint).Address;
int Port = (remoteClient.Client.RemoteEndPoint as IPEndPoint).Port; //让客户显示"连接成功的"的信息
string sendmsg = "连接服务端成功!\r\n" + "本地IP:" + IP + ",本地端口" + Port;
byte[] arrSendMsg = Encoding.UTF8.GetBytes(sendmsg);
remoteClient.Client.Send(arrSendMsg);
//给外面也弄个套接字
socketwatch = remoteClient.Client;
//客户端网络结点号
string remoteEndPoint = remoteClient.Client.RemoteEndPoint.ToString();
//显示与客户端连接情况
String str = "成功与" + remoteEndPoint + "客户端建立连接!\t\n";
//添加客户端信息
NetChgbCientr.Form1.Updata ifu = (NetChgbCientr.Form1.Updata)ud;
ifu(str);
clientConnectionItems.Add(remoteEndPoint, remoteClient.Client); //IPEndPoint netpoint = new IPEndPoint(clientIP,clientPort);
IPEndPoint netpoint = remoteClient.Client.RemoteEndPoint as IPEndPoint; ArrayList li = new ArrayList();
li.Add(remoteClient.Client);
li.Add(ud); //创建一个通信线程 收
ParameterizedThreadStart pts = new ParameterizedThreadStart(recv);
Thread thread = new Thread(pts);
//设置为后台线程,随着主线程退出而退出
thread.IsBackground = true;
//启动线程
thread.Start(li);
}
} // 接收客户端发来的信息,客户端套接字对象
public void recv(object li)
{
Socket socketServer = (li as ArrayList)[] as Socket; while (true)
{
//创建一个内存缓冲区,其大小为1024*1024字节 即1M
byte[] arrServerRecMsg = new byte[ * ];
//将接收到的信息存入到内存缓冲区,并返回其字节数组的长度
try
{
//获取长度判断请求
int length = socketServer.Receive(arrServerRecMsg); switch (length)
{
case : this.QueryAll();
break;
case : MessageBox.Show("还没写 显示一条");
break;
} //将机器接受到的字节数组转换为人可以读懂的字符串
//string strSRecMsg = Encoding.UTF8.GetString(arrServerRecMsg, 0, length);
//将发送的字符串信息附加到文本框txtMsg上
//NetChgbServer.Form1.Updata inc = (li as ArrayList)[1] as NetChgbServer.Form1.Updata;
//inc("客户端:" + socketServer.RemoteEndPoint + ",time:" + GetCurrentTime() + "\r\n" + strSRecMsg + "\r\n\n");
}
catch (Exception ex)
{
clientConnectionItems.Remove(socketServer.RemoteEndPoint.ToString()); MessageBox.Show("Client Count:" + clientConnectionItems.Count); //提示套接字监听异常
MessageBox.Show("客户端" + socketServer.RemoteEndPoint + "已经中断连接" + "\r\n" + ex.Message + "\r\n" + ex.StackTrace + "\r\n");
//关闭之前accept出来的和客户端进行通信的套接字
socketServer.Close();
break;
}
}
} //发送消息给客服端
public void Send(String Ja)
{ //将输入的内容字符串转换为机器可以识别的字节数组
byte[] arrClientSendMsg = Encoding.UTF8.GetBytes(Ja);
//调用客户端套接字发送字节数组
socketwatch.Send(arrClientSendMsg);
} }
public partial class Form1 : Form
{
public delegate void Updata(string s);
ViShow Vs = new ViShow();
public Form1()
{
InitializeComponent();
}//启服务
private void Open_Click(object sender, EventArgs e)
{ Updata ud = new Updata(UpdateLabel2);
Vs.ViOpen(ud); } private void text1_TextChanged(object sender, EventArgs e)
{ } //主线程外访问控件
private void UpdateLabel2(String str)
{ if (text1.InvokeRequired)
{
// 当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它
Action<string> actionDelegate = (x) => { text1.AppendText(x.ToString()); };
// 或者
// Action<string> actionDelegate = delegate(string txt) { this.label2.Text = txt; };
text1.Invoke(actionDelegate, str);
}
else
{
text1.AppendText(str);
}
} }
public partial class Form1 : Form
{
Thread threadclient = null;
Socket socketclient = null;
int sign;
public Form1()
{
InitializeComponent();;
} //DataShow 容器
private void DataShow_CellContentClick(object sender, DataGridViewCellEventArgs e)
{ } //显示全部数据按钮 ShowAll
private void button1_Click(object sender, EventArgs e)
{
sign = ;
//将输入的内容字符串转换为机器可以识别的字节数组
byte[] arrClientSendMsg = Encoding.UTF8.GetBytes("");
//调用客户端套接字发送字节数组
socketclient.Send(arrClientSendMsg); } //连接服务器
private void butt2_Click(object sender, EventArgs e)
{
//定义一个套接字监听
socketclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //获取文本框中的IP地址
IPAddress address = IPAddress.Parse("192.168.1.112"); //将获取的IP地址和端口号绑定在网络节点上
IPEndPoint point = new IPEndPoint(address, );
try
{
//客户端套接字连接到网络节点上,用的是Connect
socketclient.Connect(point); sign = ;
}
catch (Exception)
{
MessageBox.Show("连接失败\r\n");
return;
}
threadclient = new Thread(recv);
threadclient.IsBackground = true;
threadclient.Start();
} // 接收服务端发来信息的方法
void recv()
{
//持续监听服务端发来的消息
while (true)
{
//定义一个1M的内存缓冲区,用于临时性存储接收到的消息
byte[] arrRecvmsg = new byte[ * ]; //将客户端套接字接收到的数据存入内存缓冲区,并获取长度
int length = socketclient.Receive(arrRecvmsg); //将套接字获取到的字符数组转换为人可以看懂的字符串
string strRevMsg = Encoding.UTF8.GetString(arrRecvmsg, , length);
Control.CheckForIllegalCrossThreadCalls = false; //这里不允许这样操作访问控件,这里为了测试方便
if (sign == )
{
MessageBox.Show(strRevMsg);
this.butt2.Text = "断开连接";
sign = ;
}
else
{
MessageBox.Show(strRevMsg);
List<CHGB> list = JsonConvert.DeserializeObject<List<CHGB>>(strRevMsg); //先给DataSource 一个地址,再把list给DataGridView控件
//不给地址会报 ”引用没有作用到实例上“
DataTable dt = new DataTable();
this.DataShow.DataSource = dt;// list;
this.DataShow.DataSource = list;
} }
}
日笔记--C# 从数据库取表格到DataGridView---json传输的更多相关文章
- C#——数据库取数据,DataGridView显示数据
使用未封装的方法连接数据库 步骤: 一.确定连接方式(以SqlServer为例): ①Windows身份验证. string ConnectionType = "server=.;datab ...
- C#程序中从数据库取数据时需注意数据类型之间的对应,int16\int32\int64
private void btn2_Click(object sender, RoutedEventArgs e) { using (SqlConnection ...
- 另类爬虫:从PDF文件中爬取表格数据
简介 本文将展示一个稍微不一样点的爬虫. 以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...
- 利用PHP实现登录与注册功能以及使用PHP读取mysql数据库——以表格形式显示数据
登录界面 <body><form action="login1.php" method="post"><div>用户名:&l ...
- SQLMAP学习笔记2 Mysql数据库注入
SQLMAP学习笔记2 Mysql数据库注入 注入流程 (如果网站需要登录,就要用到cookie信息,通过F12开发者工具获取cookie信息) sqlmap -u "URL" - ...
- C#读写Access数据库、表格datagridview窗体显示代码实例
C#读写Access数据库.表格datagridview窗体显示代码实例 最近项目中用到C#对于Access数据库表读写.mdb操作,学习了下相关的东西,这里先整理C#对于Access数据库的操作,对 ...
- 爬取表格类网站数据并保存为excel文件
本文转载自以下网站:50 行代码爬取东方财富网上市公司 10 年近百万行财务报表数据 https://www.makcyun.top/web_scraping_withpython6.html 主要学 ...
- 【python爬虫和正则表达式】爬取表格中的的二级链接
开始进公司实习的一个任务是整理一个网页页面上二级链接的内容整理到EXCEL中,这项工作把我头都搞大了,整理了好几天,实习生就是端茶送水的.前段时间学了爬虫,于是我想能不能用python写一个爬虫一个个 ...
- 简易数据分析 11 | Web Scraper 抓取表格数据
这是简易数据分析系列的第 11 篇文章. 今天我们讲讲如何抓取网页表格里的数据.首先我们分析一下,网页里的经典表格是怎么构成的. First Name 所在的行比较特殊,是一个表格的表头,表示信息分类 ...
随机推荐
- 我的solr学习笔记--solr admin 页面 检索调试
前言 Solr/Lucene是一个全文检索引擎,全文引擎和SQL引擎所不同的是强调部分相关度高的内容返回,而不是所有内容返回,所以部分内容包含在索引库中却无法命中是正常现象. 多数情况下我们 ...
- 在WebBrowser中发送POST请求
我们要用到的也是WebBrowser的“Navigate”方法,其函数原型如下所示: Sub Navigate(URL As String, [Flags], [TargetFrameName], [ ...
- java 序列化时排除指定属性
java 序列化对象如何排除指定属性呢? java 中序列化对象有多种方式:struts2 ,jackson,json-lib (1)使用struts2 json插件 依赖的jar包:struts2- ...
- Java路程
Java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每 ...
- MVC-READ3(视图引擎主要类关系图)
- rdd去重
a=[[1,2,3,2,3,4],[3,4,5,6,7,5,3,2]]b=sc.parallelize(a) d=b.flatMap(lambda x:x) #铺平 ,形成一个rdd e=d.dis ...
- hadoop之HDFS学习笔记(二)
主要内容:hdfs的核心工作原理:namenode元数据管理机制,checkpoint机制:数据上传下载流程 1.hdfs的核心工作原理 1.1.namenode元数据管理要点 1.什么是元数据? h ...
- FD_CLOEXEC
[FD_CLOEXEC] 通过fcntl设置FD_CLOEXEC标志有什么用? close on exec, 意为如果对描述符设置了FD_CLOEXEC,使用execl执行的程序里,此描述符被关闭,不 ...
- JQuery:选择器、动画、AJAX请求
选择器 1.事件编程与动画效果 一个选择器可以在概念上理解为指针.借助与JQuery库中的选择器$,线程可以获取到界面元素的引用,从而可以调用 ready().click()方法把用户事件和动作方法关 ...
- set 续4
---------siwuxie095 批处理简易计算器 @echo off ::设置窗口标题 title DOS 简易计算器 ::设置窗口大小 ::设置窗口颜色 co ...