实验要求:
系统功能
合法用户可正常登录认证;
指定攻击用户、指定字典后,可实施攻击;
在指定ID情况下,逐一取词尝试,直至破解成功或全部尝试后失败;
返回破解结果;
完整性要求
字典长度超过1K;日志中要体现;
具体实现:
客户端两个主要界面
客户端:
1.client-log界面代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 实验1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
TextBox.CheckForIllegalCrossThreadCalls = false;
}
Socket socketClient = null;
Thread threadClient = null;
private void Form1_Load(object sender, EventArgs e)
{
//定义一个套字节监听 包含3个参数(IP4寻址协议,流式连接,TCP协议)
socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipaddress = IPAddress.Parse("127.0.0.1");
//将获取的ip地址和端口号绑定到网络节点endpoint上
IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse("9190"));
//这里客户端套接字连接到网络节点(服务端)用的方法是Connect 而不是Bind
try
{
socketClient.Connect(endpoint);
//创建一个线程 用于监听服务端发来的消息
threadClient = new Thread(RecMsg);
//将窗体线程设置为与后台同步
threadClient.IsBackground = true;
//启动线程
threadClient.Start();
}
catch (Exception ex)
{
MessageBox.Show("远程服务端断开,连接失败!" + "\r\n");
}
}
private void RecMsg()// 接收服务端发来信息的方法
{
String sort = "";
if (safe.Checked == true)
{ sort = "SLOG"; }
else if (log.Checked == true)
{ sort = "LLOG"; }
else if (user.Checked == true)
{ sort = "ULOG"; }
else if (system.Checked == true)
{ sort = "SYLOG"; }
while (true) //持续监听服务端发来的消息
{
try
{
//定义一个1M的内存缓冲区 用于临时性存储接收到的信息
byte[] arrRecMsg = new byte[1024 * 1024];
//将客户端套接字接收到的数据存入内存缓冲区, 并获取其长度
int length = socketClient.Receive(arrRecMsg);
//将套接字获取到的字节数组转换为人可以看懂的字符串
string strRecMsg = Encoding.UTF8.GetString(arrRecMsg, 0, length);
if (Class1.flag == 0)
{
if (strRecMsg == "true")
{
if (safe.Checked == true)
{ MessageBox.Show("安全管理员登录成功!"); Class1.WriteLogFile("SLOG", this.username.Text.Trim(), "true", ""); }
else if (log.Checked == true)
{
Class1.WriteLogFile("LLOG", this.username.Text.Trim(), "true", "");
log form4 = new log();//想要打开的窗体界面
this.Hide();//隐藏当前窗体
form4.ShowDialog();
Application.ExitThread();
}
else if (user.Checked == true)
{
Class1.WriteLogFile("ULOG", this.username.Text.Trim(), "true", "");
success form3 = new success();//想要打开的窗体界面
this.Hide();//隐藏当前窗体
form3.ShowDialog();
Application.ExitThread();
}
else if (system.Checked == true)
{ MessageBox.Show("系统管理员登录成功!"); Class1.WriteLogFile("SYLOG", this.username.Text.Trim(), "true", ""); }
}
else if (strRecMsg == "false")
{ MessageBox.Show("密码错误!"); Class1.WriteLogFile(sort, this.username.Text.Trim(), "faluse", ""); }
else
{ MessageBox.Show("没有该账号!"); Class1.WriteLogFile(sort, this.username.Text.Trim(), "nofind", ""); }
}
else
{
Regex r = new Regex("true"); // 定义一个Regex对象实例
Match m = r.Match(strRecMsg); // 在字符串中匹配
if (m.Success)
{
string[] arr = strRecMsg.Split(';');
MessageBox.Show("\t获取成功\n用户名:" + username.Text.Trim() + "\n密码:" + arr[1]);
Class1.WriteLogFile(sort, this.username.Text.Trim(), "true", Class1.data[Class1.numble]);
Class1.flag = 0;
}
else if (strRecMsg == "faluse")
{
if (Class1.numble != Class1.Maxnum)
{
ClientSendMsg(this.username.Text.Trim() + ";" + Class1.data[Class1.numble] + ";" + "ULOG1");
Class1.WriteLogFile(sort, this.username.Text.Trim(), "faluse", Class1.data[Class1.numble]);
Class1.numble++;
}
else { MessageBox.Show("您给的txt文本没有找到正确的密码!"); Class1.flag = 0; }
}
else { MessageBox.Show("没有该账号!请检查类型是否选对!");
Class1.WriteLogFile(sort, this.username.Text.Trim(), "nofind", ""); }
}
}
catch (Exception ex)
{
MessageBox.Show("远程服务器已中断连接!" + "\r\n");
break;
}
}
}
private void ClientSendMsg(string sendMsg)// 发送字符串信息到服务端的方法
{
try
{
//将输入的内容字符串转换为机器可以识别的字节数组
byte[] arrClientSendMsg = Encoding.UTF8.GetBytes(sendMsg);
//调用客户端套接字发送字节数组
socketClient.Send(arrClientSendMsg);
}
catch (Exception ex)
{
MessageBox.Show("远程服务器已中断连接,无法发送消息!" + "\r\n");
}
}
private DateTime GetCurrentTime()
{
DateTime currentTime = new DateTime();
currentTime = DateTime.Now;
return currentTime;
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog fileDialog = new OpenFileDialog();
fileDialog.Multiselect = true;
fileDialog.Title = "请选择文件";
fileDialog.Filter = "文本文件(.txt)|*.txt"; //设置要选择的文件的类型|后面的是允许出现任意名字但后缀为txt的文本文件
if (fileDialog.ShowDialog() == DialogResult.OK)
{
String file = fileDialog.FileName;//返回文件的完整路径
string line = ""; int i;
//得到行数据,for循环发送密码给服务端
using (StreamReader sr = new StreamReader(file))
{
for (i = 0; (line = sr.ReadLine()) != null; i++)
{
Class1.data[i] = line; //不能将line直接转化为double
}
Class1.Maxnum=i;
}
Class1.flag = 1;
MessageBox.Show("请点击尝试,将会发起字典攻击!");
}
}
private void button2_Click(object sender, EventArgs e)
{
//调用ClientSendMsg方法 将文本框中输入的信息发送给服务端
if (safe.Checked == true)
{
if ((password.Text.Length >= 6) && (password.Text.Length <= 8))
{
Class1.flag = 0;
ClientSendMsg(this.username.Text.Trim() + ";" + this.password.Text.Trim() + ";" + "SLOG");
}
else if (username.Text.Length == 0 || password.Text.Length == 0)
{ MessageBox.Show("输入有空项,请重新输入"); Class1.WriteLogFile("SLOG", "", "void", "thing"); }
else { MessageBox.Show("输入长度有误!"); Class1.WriteLogFile("SLOG", "", "nle", "thing"); }
}
else if (log.Checked == true)
{
if ( (password.Text.Length >= 6) && (password.Text.Length <= 8))
{
Class1.flag = 0;
ClientSendMsg(this.username.Text.Trim() + ";" + this.password.Text.Trim() + ";" + "LLOG");
}
else if (username.Text.Length == 0 || password.Text.Length == 0)
{
MessageBox.Show("输入有空项,请重新输入");
Class1.WriteLogFile("LLOG", "", "void", "");
}
else { MessageBox.Show("输入长度有误!"); Class1.WriteLogFile("SLOG", "", "nle", "thing"); }
}
else if (system.Checked == true)
{
if ( (password.Text.Length >= 6) && (password.Text.Length <= 8))
{
Class1.flag = 0;
ClientSendMsg(this.username.Text.Trim() + ";" + this.password.Text.Trim() + ";" + "SYLOG");
}
else if (username.Text.Length == 0 || password.Text.Length == 0)
{
MessageBox.Show("输入有空项,请重新输入");
Class1.WriteLogFile("SYLOG", "", "void", "");
}
else { MessageBox.Show("输入长度有误!"); Class1.WriteLogFile("SYLOG", "", "nle", "thing"); }
}
else
{
if ( (password.Text.Length >= 6) && (password.Text.Length <= 8))
{
Class1.flag = 0;
ClientSendMsg(this.username.Text.Trim() + ";" + this.password.Text.Trim() + ";" + "ULOG");
}
else if (username.Text.Length == 0 || password.Text.Length == 0)
{
MessageBox.Show("输入有空项,请重新输入");
Class1.WriteLogFile("ULOG", "", "void", "");
}
else { MessageBox.Show("输入长度有误!"); Class1.WriteLogFile("ULOG", "", "nle", "thing"); }
}
}
private void button4_Click(object sender, EventArgs e)
{
Form2 form1 = new Form2();//想要打开的窗体界面
this.Hide();//隐藏当前窗体
form1.ShowDialog();
Application.ExitThread();
}
private void button3_Click(object sender, EventArgs e)
{
if (Class1.flag == 1 && username.Text.Trim() != "")
{
Class1.numble = 0;
ClientSendMsg(this.username.Text.Trim() + ";" + Class1.data[Class1.numble] + ";" + "ULOG1");
Class1.numble++;
}
else if (Class1.flag == 1) MessageBox.Show("请在用户名处写上你要攻击人的用户名!");
else MessageBox.Show("请选择字典攻击的文本!");
}
}
}
2.form3日志代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 实验1
{
public partial class log : Form
{
public log()
{
InitializeComponent();
ReadTextFile(@"E:\网络安全\实验1\LogFile.txt");
}
private void ReadTextFile(string filePath)
{
string[] lines = File.ReadAllLines(filePath);
foreach (string line in lines)
{
logbox.AppendText(line + Environment.NewLine);
}
}
private void button1_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1();//想要打开的窗体界面
this.Hide();//隐藏当前窗体
form1.ShowDialog();
Application.ExitThread();
}
private void log_Load(object sender, EventArgs e)
{
}
}
}
3.类:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 实验1
{
class Class1
{
public static string i;
public static int flag =0;
public static string[] data = new string[500];
public static int numble = 0;
public static int Maxnum = 0;
public static void WriteLogFile(string sort, string name, string result, string thing)
{
//改路径
string logPath = "E:\\网络安全\\实验1";
string fname = logPath + "\\LogFile.txt";//指定日志文件的目录
FileInfo finfo = new FileInfo(fname);//定义文件信息对象
if (!finfo.Exists)
{
FileStream fs; fs = File.Create(fname);
fs.Close(); finfo = new FileInfo(fname);
}
if (finfo.Length > 1024 * 1024 * 10)//文件超过10MB则重命名
File.Move(logPath + "\\LogFile.txt", logPath + DateTime.Now.TimeOfDay + "\\LogFile.txt");
using (FileStream fs = finfo.OpenWrite())//创建只写文件流
{
StreamWriter w = new StreamWriter(fs); //根据上面创建的文件流创建写数据流
w.BaseStream.Seek(0, SeekOrigin.End);//设置写数据流的起始位置为文件流的末尾
w.Write("\n时间:{0} {1}", DateTime.Now.ToLongTimeString(),
DateTime.Now.ToLongDateString());
//人物+事件(定整体)
if (sort == "SLOG")
{
w.Write(" 主体:安全管理员name:" + name + " 事件:登录");
//结果
if (result == "true") w.Write(" 结果:成功\n");
else if (result == "faluse") w.Write(" 结果:失败\n");
else if (result == "nofind") w.Write(" 结果:不存在该账号\n");
else if (result == "void") w.Write(" 结果:失败 输入有空项\n");
else if (result == "nle") w.Write(" 结果:失败 输入有空项\n");
}
else if (sort == "LLOG")
{
w.Write(" 主体: 日志管理员name:" + name + " 事件:登录");
//结果
if (result == "true") w.Write(" 结果:成功\n");
else if (result == "faluse") w.Write(" 结果:失败\n");
else if (result == "nofind") w.Write(" 结果:不存在该账号\n");
else if (result == "void") w.Write(" 结果:失败 输入有空项\n");
else if (result == "nle") w.Write(" 结果:失败 输入有空项\n");
}
else if (sort == "SYLOG")
{
w.Write(" 主体: 系统管理员name:" + name + " 事件:登录");
//结果
if (result == "true") w.Write(" 结果:成功\n");
else if (result == "faluse") w.Write(" 结果:失败\n");
else if (result == "nofind") w.Write(" 结果:不存在该账号\n");
else if (result == "void") w.Write(" 结果:失败 输入有空项\n");
else if (result == "nle") w.Write(" 结果:失败 输入有空项\n");
}
else if (sort == "ULOG")
{
w.Write(" 主体:普通用户name:" + name + " 事件:登录");
//结果
if (result == "true") w.Write(" 结果:成功\n");
else if (result == "faluse") w.Write(" 结果:失败\n");
else if (result == "frozen") w.Write(" 结果:锁定\n");
else if (result == "nofind") w.Write(" 结果:失败,未找到该账号\n");
else if (result == "void") w.Write(" 结果:失败 输入有空项\n");
else if (result == "nle") w.Write(" 结果:失败 输入有空项\n");
}
else if (sort == "SADMS")
{
w.Write(" 主体:审计管理员name:" + name + " 事件:注册");
//结果
if (result == "true") w.Write(" 结果:成功\n");
else if (result == "faluse") w.Write(" 结果:账号已存在,注册失败\n");
}
else if (sort == "LADMS")
{
w.Write(" 主体:日志管理员name:" + name + " 事件:注册");
//结果
if (result == "true") w.Write(" 结果:成功\n");
else if (result == "faluse") w.Write(" 结果:账号已存在,注册失败\n");
}
else if (sort == "SYADMS")
{
w.Write(" 主体:系统管理员name:" + name + " 事件:注册");
//结果
if (result == "true") w.Write(" 结果:成功\n");
else if (result == "faluse") w.Write(" 结果:账号已存在,注册失败\n");
}
else if (sort == "Find")//公告栏
{
w.Write(" 主体:普通用户name:" + name + " 事件:查询账号审核状态");
//结果
if (result == "true") w.Write(" 结果:成功\n");
else if (result == "faluse") w.Write(" 结果:失败\n");
}
else if (sort == "FP")//忘记密码
{
w.Write(" 主体:普通用户name:" + name + " 事件:忘记密码");
//结果
if (result == "audit1") w.Write(" 结果:提交忘记密码申请成功\n");
else w.Write(" 结果:提交忘记密码申请失败\n");
}
else if (sort == "Cpassword")//修改密码
{
w.Write(" 主体:普通用户name:" + name + " 事件:修改密码");
if (result == "true") w.Write(" 结果:成功\n");
else if (result == "faluse") w.Write(" 结果:失败\n");
}
else if (sort.Length == 11)//注册
{
w.Write(" 主体:普通用户name:" + name + " 事件:用户注册" + "");
if (result == "true") w.Write(" 结果:成功\n");
else if (result == "faluse") w.Write(" 结果:失败");
w.Write("\n\t\t" + thing + "\n");
}
else if (sort == "Sa")//审核用户
{
w.Write(" 主体:安全管理员name:" + name + " 事件:用户审核" + "");
if (result == "true") w.Write(" 结果:成功\n");
else if (result == "faluse") w.Write(" 结果:失败");
w.Write("\n\t\t" + thing + "\n");
}
else if (sort == "Sd")//删除用户
{
w.Write(" 主体:安全管理员name:" + name + " 事件:删除用户");
if (result == "true") w.Write(" 结果:成功");
else if (result == "faluse") w.Write(" 结果:失败");
w.Write("\n\t\t" + thing + "\n");
}
else if (sort == "Sadd")//增加用户
{
w.Write(" 主体:安全管理员name:" + name + " 事件:增加用户");
if (result == "true") w.Write(" 结果:成功");
else if (result == "faluse") w.Write(" 结果:失败");
w.Write("\n\t\t" + thing + "\n");
}
else if (sort == "Sc")//修改用户信息
{
w.Write(" 主体:安全管理员name:" + name + " 事件:修改用户信息");
if (result == "true") w.Write(" 结果:成功");
else if (result == "faluse") w.Write(" 结果:失败");
w.Write("\n\t\t" + thing + "\n");
}
w.Flush();//清空缓冲区内容,并把缓冲区内容写入基础流
w.Close();//关闭写数据流
}
}
}
}
服务端:
serve界面代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Data.SqlClient;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;
namespace client
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
TextBox.CheckForIllegalCrossThreadCalls = false;
}
Thread threadWatch = null; //负责监听客户端的线程
Socket socketWatch = null; //负责监听客户端的套接字
private void Form1_Load(object sender, EventArgs e)
{
try
{
//定义一个套接字用于监听客户端发来的信息 包含3个参数(IP4寻址协议,流式连接,TCP协议)
socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//服务端发送信息 需要1个IP地址和端口号
IPAddress ipaddress = IPAddress.Parse("127.0.0.1");
//将IP地址和端口号绑定到网络节点endpoint上
IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse("9190"));
//监听绑定的网络节点
socketWatch.Bind(endpoint); //负责监听客户端的套接字
//将套接字的监听队列长度限制为20
socketWatch.Listen(20);
//创建一个监听线程
threadWatch = new Thread(WatchConnecting);//负责监听客户端的线程
//将窗体线程设置为与后台同步
threadWatch.IsBackground = true;
//启动线程
threadWatch.Start();
//启动线程后 txtMsg文本框显示相应提示
txtMsg.AppendText("开始监听客户端传来的信息!" + "\r\n");
}
catch (Exception ex)
{
txtMsg.AppendText("服务端启动服务失败!" + "\r\n");
}
}
//创建一个负责和客户端通信的套接字
Socket socConnection = null;
private void WatchConnecting()// 监听客户端发来的请求
{
while (true) //持续不断监听客户端发来的请求
{
socConnection = socketWatch.Accept();
txtMsg.AppendText("客户端连接成功! " + "\r\n");
//创建一个通信线程 使用ParameterizedThreadStart委托向线程函数传送参数
ParameterizedThreadStart pts = new ParameterizedThreadStart(ServerRecMsg);
Thread thr = new Thread(pts);
thr.IsBackground = true;
thr.Start(socConnection);//启动线程
}
}
private void ServerRecMsg(object socketClientPara)// 接收客户端发来的信息并返回(用户名和密码)
{
Socket socketServer = socketClientPara as Socket;//as:用于检查在兼容的引用类型之间执行某些类型的转换
while (true)
{
byte[] arrServerRecMsg = new byte[1024 ];//创建个内存缓冲区 其大小为1024*1024字节 即1M
try
{
//将接收到的信息存入到内存缓冲区,并返回其字节数组的长度
int length = socketServer.Receive(arrServerRecMsg);
//将机器接受到的字节数组转换为人可以读懂的字符串
string strSRecMsg = Encoding.UTF8.GetString(arrServerRecMsg, 0, length);
string[] arr = strSRecMsg.Split(';');
txtMsg.AppendText("YAN " + GetCurrentTime() + "\r\t" + arr[0] + "\r\n");
txtMsg.AppendText("YAN " + GetCurrentTime() + "\r\t" + arr[1] + "\r\n");
txtMsg.AppendText("YAN " + GetCurrentTime() + "\r\t" + arr[2] + "\r\n");
//连接数据库//模糊匹配!可能要用到正则
String sort = "";
Regex r = new Regex("LOG"); // 定义一个Regex对象实例
Match m = r.Match(arr[2]); // 在字符串中匹配
if (m.Success)
{
Regex regex = new Regex("ULOG"); // 定义一个Regex对象实例
Match z = regex.Match(arr[2]); // 在字符串中匹配
if (z.Success) { sort = "u"; }
else if (arr[2] == "SLOG") { sort = "s"; }
else if (arr[2] == "SYLOG") { sort = "sy"; }
else if (arr[2] == "LLOG") { sort = "l"; }
String strexist = "select * from et where USERNAME='" + arr[0] + "'and sort='" + sort+"'";
String str = "select * from et where USERNAME='" + arr[0] + "'and password='" + arr[1] + "'and sort='" + sort +"'";
bool i = Class1.select(strexist); String r_news = "nofind";
if (i)
{
bool t = Class1.select(str);
if (t) {
if(arr[2]=="ULOG"|| arr[2] == "ULOG1")
{
if(arr[2]=="ULOG")
r_news = "true";
else r_news = "true;" + arr[1];
}
else r_news = "true";
} else r_news = "faluse";
}
ServerSendMsg(r_news);
}
else
{
if (arr[2] == "USIGN") { sort = "u"; }
else if (arr[2] == "SSIGN") { sort = "s"; }
else if (arr[2] == "SYSIGN") { sort = "sy"; }
else if (arr[2] == "LSIGN") { sort = "l"; }
String strexist = "select * from et where USERNAME='" + arr[0] + "'and sort=" + sort;
String str = " insert into et(USERNAME,password,sort) values('" + arr[0] + "','"+arr[1]+"','"+sort+"')";
bool i = Class1.select(strexist); String r_news = "exist";
if (!i)
{
int t = Class1.add(str);
if (t>0) { r_news = "true"; } else r_news = "faluse";
}
ServerSendMsg(r_news);
}
}
catch (Exception ex)
{
txtMsg.AppendText("客户端已断开连接!" + "\r\n");
break;
}
}
}
private void ServerSendMsg(string returnnews)// 发送信息到客户端的方法
{
try
{
//将输入的字符串转换成 机器可以识别的字节数组
byte[] arrSendMsg = Encoding.UTF8.GetBytes(returnnews);
//加附加语句
//向客户端发送字节数组信息
socConnection.Send(arrSendMsg);
//将发送的字符串信息附加到文本框txtMsg上(serve)
txtMsg.AppendText("服务器 " + GetCurrentTime() + "\r\t" + returnnews + "\r\n");
}
catch (Exception ex)
{
txtMsg.AppendText("客户端已断开连接,无法发送信息!" + "\r\n");
}
}
public IPAddress GetLocalIPv4Address()// 获取本地IPv4地址
{
IPAddress localIpv4 = null;
//获取本机所有的IP地址列表
IPAddress[] IpList = Dns.GetHostAddresses(Dns.GetHostName());
//循环遍历所有IP地址
foreach (IPAddress IP in IpList)
{
//判断是否是IPv4地址
if (IP.AddressFamily == AddressFamily.InterNetwork)
localIpv4 = IP;
else continue;
}
return localIpv4;
}
private DateTime GetCurrentTime()// 获取当前系统时间的方法
{
DateTime currentTime = new DateTime();
currentTime = DateTime.Now;
return currentTime;
}
private void txtMsg_TextChanged(object sender, EventArgs e)
{
}
}
}
类
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace client
{
class Class1
{
public static bool select(string str)
{
bool a = true;
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=KLRZ;Integrated Security=True");//用户密码登录
conn.Open();
SqlCommand cmd = new SqlCommand(str, conn);
SqlDataReader sqlDataReader = cmd.ExecuteReader();
a = sqlDataReader.Read();
conn.Close();
return a;
}
public static int selectc(string str, bool a)
{
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=KLRZ;Integrated Security=True");//用户密码登录
conn.Open();
SqlCommand cmd = new SqlCommand(str, conn);
SqlDataReader sqlDataReader = cmd.ExecuteReader();
a = sqlDataReader.Read();
int different = Convert.ToInt32(sqlDataReader[0]);
conn.Close();
return different;
}
public static int add(string str)
{
int a = 3;
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=KLRZ;Integrated Security=True");//用户密码登录
conn.Open();
SqlCommand cmd = new SqlCommand(str, conn);
//SqlDataReader sqlDataReader = cmd.ExecuteReader();
a = cmd.ExecuteNonQuery();
conn.Close();
return a;
}
}
}
数据库结构: