日笔记--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 所在的行比较特殊,是一个表格的表头,表示信息分类 ...
随机推荐
- leetcode 几何题 位运算 面试编程
[BZOJ][CQOI2014]数三角形 Description给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input ...
- 常用的ubantu操作命令
Ubuntu软件操作的相关命令 sudo apt-get update 更新源 sudo apt-get install package 安装包 sudo apt-get remove package ...
- 下拉菜单的实现classList.add() classList.remove() class属性的添加和删除
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- LUA表的引用理解
--lua中引用类型都是分配在堆上的 --因此,我们在使用LUA的table时,可尽可能的使用表的引用,而不需要拷贝表里的元素 --比如,通过RPC协议传来一个表A,我们想要缓存这个表,只需要保存该表 ...
- JSTL的基本使用
<body> <% request.setAttribute("name", "lisi123"); request.setAttribute ...
- grep 过滤.svn文件
[grep 过滤.svn文件] 问题: 在repository搜索代码时,常常会搜索到.svn的代码,如果不想搜索.svn目录下的相关代码怎么办? 1.使用管道进行双层“过滤”,其中第二次gre ...
- token的作用及实现原理
1:首先,先了解一下request和session的区别request 指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletRequest对象 ...
- 使用javascript,jquery实现的图片轮播功能
使用javascript,jquery实现的图片轮播功能本功能采用最基础的javascript和一些简单的jquery技术实现,易理解,以修改使用,代码简易,适合刚开始接触到网站开发的朋友们参考.可以 ...
- Emacs中编辑保存makefile文件时会错误地将TAB转成空格的解决方法
问题描述 我的Emacs使用了Purcell的配置,在其配置中使用了whitespace-cleanup,且通过在.emacs.d/lisp/init-edit-utils.el中设定: (requi ...
- ajax传递数组及后台接收
ajax传递的是{"items":arr},其中arr=[]; 在后台String[] items=req.getParameterValues("items" ...