日笔记--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 所在的行比较特殊,是一个表格的表头,表示信息分类 ...
随机推荐
- oracle完全删除表空间
步骤一: 删除user drop user ×× cascade 说明: 删除了user,只是删除了该user下的schema objects,是不会删除相应的tablespace的. 步骤二: 删除 ...
- git/github基本命令
Git与项目 git的使用,主要包括: 本地仓库的命令 远程仓库的命令 项目需求.页面.模型类的设计,及页面的使用 sudo apt-get install git 安装成功后,运行如下命令 git ...
- HTTP 协议基础
HTTP 协议的主要特点可概括如下: 1.支持客户/服务器模式. 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径.请求方法常用的有GET.HEAD.POST.每种方法规定了客户与服务器联 ...
- 42.国际化-配置package的资源文件
转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 同样在建立com.asm包下建立两个资源文件(package级别的资源文件名 ...
- [jOOQ中文] 七个步骤快速入门
https://segmentfault.com/a/1190000010415384 关于jOOQ jOOQ: The easiest way to write SQL in Java jOOQ是一 ...
- C#预编译的问题
C#预编译宏并不像C++那样编译之后就不存在了.在UNITY的C#脚本中 #if UNITY_ANDROID && !UNITY_EDITOR AndroidJavaClass jc ...
- springmvc框架自带的异常处理器SimpleMappingExceptionResolver的使用
使用分三步 1.定义异常类 2.在处理器中的用法 3.在springmvc配置文件中需要加配置
- 新手C#int.Parse、int.TryParse的学习2018.08.04
int.Parse()用于将字符串转换为32为int类型,但是在遇到非数字或者类似1.545这种小数的时候会报错,后来采用了int.TryParse,这个在转换后会判断是否可以正常转换,若不能,会返回 ...
- cas 退出后跳转指定页面
退出连接 https://localhost:8888/cas/logout?service=https://localhost:8080/cas-client/login 修改cas-server配 ...
- iOS7的iBeacon初步使用
iBeacon是iOS7的新增的功能,通过BLE实现室内定位,精确到厘米级别. 测试使用两台iPhone(支持BLE),一台作为iBeacon基站广播信号,代码使用官方源码AirLocate,另外一台 ...