SQL启用TCP并使用C# Socket连接进行数据收发
所用到工具
SSMS(SQL数据库管理工具 )
SQL Server Management Studio (SSMS)是一款可视化管理SQL数据库的工具,可以在客户端的电脑进行SQL数据库的配置,监视,进行数据库的脚本查询等。下载链接
Visual Studio
这个不用多说,C#编码工具。下载链接
序言
突发奇想,想做一个能快速查看或者更改MES上数据的桌面应用程序。也是因为自己在工作中也有接触到这一需求,刚好最近在学习C#和SQL,顺手把他当作一个项目制作一下吧。练练手,本人比较新手,请多多谏言。
C#相关命名空间及SQL项目配置
using System.Data;
using System.Data.SqlClient;
下面是服务器的配置
这里在本地建立一个服务器,服务器名称可以选择本地账户名或者ip地址(本地)+端口号的形式
注意: 如果要使用ip地址连接的话,要到电脑的SQL配置里面启用TCP/IP协议,默认是关闭的,方法如下图
TCP/IP协议这里需要配置ip地址的端口号,端口号建议配置50000后(刚开始的时候连接不上很大可能就是端口被占用了,范围0~65535),地址就按本地的配置,如果有服务器的话就配置服务器的地址
如果单单是电脑启用SQL的话,在电脑服务里面找也可
配置完成后点击连接,如下图
配置服务器的数据格式
建表
逐一打开目录,在默认自带的DEMO服务器下的“表”文件夹,建立一个新表
然后建立右边数据,这里数据类型繁杂冗长,具体可以百度,当然这里的数据也不是固定的,这里仅供本例使用
记得要保存,不然这个表只能看,不能用
给表填写一些初始数据
建立查表
可以通过建立查询来检验数据是否符合要求
查询
earphone即是要进行操作的表名
所有语句后的where作用在这里都是进行条件限定(查找的特征)
插入/增加
values里面包括表里一行所需的所有数据,少一个都不行
insert into earphone values('VIVO','111222','TWS','Vietnam','Black','2021-6-5')
更新/更改
set即是要更改的参数项
update earphone set color='pink' where barcode='111222'
删除
delete from earphone where product='111222'
C#代码编写
这里建立一个与服务器通讯的类,这样可以方便调用并且更加规范化
连接
public SqlConnection connect()
{
string link_key = "Data Source=192.168.0.103,1433\\SQLEXPRESS;Initial Catalog=Demo;Integrated Security=True";
SqlConnection sqlConnection = new SqlConnection(link_key);
sqlConnection.Open();//连接
return sqlConnection;
}
这里的link_key 是要提供的数据源,可在这里得知,如下图,需要在软件菜单-工具-连接数据库中弹出以下窗口
关于这一行的具体解释如下
Data Source=192.168.1.110,1433\SQLEXPRESS;Initial Catalog=Demo;Integrated Security=True
Data Source 是数据源;
Initial Catalog是数据库的名称;
integrated security=true表示可以在不知道数据库用户名和密码的情况下时,依然可以连接数据库
integrated security=false,或者不写,表示一定要输入正确的数据库登录名和密码。
具体配置可看(来自网友)》connectionstring配置
命令的发送
public SqlCommand send_cmd(string cmdText)
{
SqlCommand sqlCommand = new SqlCommand(cmdText, connect());
return sqlCommand;
}
//用于update,delete,insert,返回受影响的行数
public int execute(string cmdText)
{
return send_cmd(cmdText).ExecuteNonQuery();
}
//用于select读取,返回SqlDataReader对象,其中包含select的数据
public SqlDataReader read(string cmdText)
{
return send_cmd(cmdText).ExecuteReader();
}
其中,对数据的读取有一点不同,获得的对象需要用IDataReader 类型来接收
IDataReader dr = server.read(cmd);
对于这个IDataReader 和其他方法的解释,请看大佬>理解ASP.NET的IDataReader
窗口代码
DataGridView控件显示数据
主要代码
private void data_form_Load(object sender, EventArgs e)
{
sql server = new sql();
string cmd = "select * from earphone";
IDataReader dr = server.read(cmd);
int index = 0;
while (dr.Read())//如果存在更多行,则为 true;否则为 false。
{
string barcode = dr["barcode"].ToString();
string type = dr["type"].ToString();
string product = dr["product"].ToString();
string export_area = dr["export_area"].ToString();
string color = dr["color"].ToString();
string date = dr["date"].ToString();
string[] row = { product, barcode, type, export_area, color, date };
dataGridView1.Rows.Add(row);
index++;
}
}
其他应用
还可以用这个框架做一个用户登录检查的程序,如下
private void button1_Click(object sender, EventArgs e)
{
if (tb_user.Text == "" || tb_password.Text == "")
{
MessageBox.Show("输入不正确,请检查", "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
sql server = new sql();
string cmd = "select * from users where [user]='" + this.tb_user.Text + "' and password='" + this.tb_password.Text + "'";
IDataReader login = server.read(cmd);
if (login.Read())//如果存在更多行,则为 true;否则为 false。如果输入的用户名和密码都存在于数据库上,并且是同一条数据就认为登录成功
{
this.Hide();
new Main().Show();
}
}
}
跟之前一样方法建立一个储存账户信息的表
总结
写博客一是为了分享知识,二是为了巩固知识,教学相长。
同时谢谢各位能看到末尾!感谢!!