日笔记--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 所在的行比较特殊,是一个表格的表头,表示信息分类 ...
随机推荐
- bootstrap插件的一些常用属性介绍
1.下拉菜单 <div class="dropdown"> <button class="btn btn-default dropdown-toggle ...
- ubuntu16.04初始化配置
允许root登录 sudo passwd root 启动网卡DHCP并配置DNS vi /etc/network/interfaces auto ens3 #auto lo iface ens3 in ...
- [ML] CostFunction [Octave code]
function J = computeCostMulti(X, y, theta) m = length(y); % number of training examples J = 0; for i ...
- leetcode877
public class Solution { public bool StoneGame(int[] piles) { return true; } } 这问题很不好...
- python's mutable & immutable
[python's mutable & immutable] python里面的类型其实也分为immutable和mutable二种,对于mutable,如果b指向a,当b改变时,a也会改变: ...
- istview android:cacheColorHint,android:listSelector属性作用(转)
原文ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉, 原因是,滚动时,列表里面的view重绘时,用 ...
- 0. ACM系列算法
0.1 数学 0.1.1 概率 http://www.cnblogs.com/jiu0821/tag/%E6%A6%82%E7%8E%87/ 0.1.2 代数 0.1.2.1 Polya 0.1.2. ...
- What's App has the Qt?
收集了我看到的使用Qt开发的应用程序或者含有Qt库的应用程序 CNTV CNTV, 一个中央电视台的视频直播软件, 从下面卸载后的残余目录树,可以看到,存在部分库使用的就是Qt的.下面的目录树,已经删 ...
- Code First 之类继承
关于Entity Framework 的code first 模式,相信大家都不陌生了.本文就来看看实体继承在 codefirst里的用法. 第一步 添加 code first 的环境 这里为了方便 ...
- Golang之指针(point)再探索
先记录代码 package main import "fmt" /* 声明指针 *T 是指向类型T的值的指针变量的类型 */ func main() { //b := 255 // ...