当前位置: 首页 > news >正文

进阶08:C#与SQL Server通信

本节目标:

1)新建Winform项目,连接到SQL服务器;

2)新建/删除表,对表中的数据进行增、删、改、查等操作;

下面是对上面要求的最终结果,可以实现上面的所有功能。本节主要是用于作为SQL读写的参考范例。

1.1 界面设计

1)新建项目

2)界面设计

一个DataGridView(dataGridView1);

一个TextBox(tb_TableName);

六个按钮(btn_CreateTable、btn_DeleteTable、btn_ReadTable、btn_WriteTable、btn_ModifyLine、btn_DeleteRow);

1.2 编程

主界面的程序流程图如下所示,程序主要两个部分组成:SQL类和调用程序。

1.2.1 SQLHelper类

1)依赖

using System.Data.SqlClient;
using System.Data;

2)变量

//其中ServerName填写自己的服务器名称
public static string connString = @"Server=ServerName;DataBase=DBTEST;Trusted_Connection=SSPI";

3)建表

public static int CreateTable(string table,DataTable dt,int primarykey)
{SqlConnection sqlCnt = new SqlConnection(connString);//1.连接     if (sqlCnt.State != ConnectionState.Open){sqlCnt.Open();}//2.定义SQL语句//string cmdStr = "create table " + table + "(C bit,Id int, name varchar(20),Min float,Max float,Value float,Result varchar(5))";string cmdstr = "create table " + table + "(";int columns = dt.Columns.Count;for (int i = 0; i < columns; i++){cmdstr += dt.Columns[i].ColumnName.ToString();switch (dt.Columns[i].DataType.Name.ToString()){case "Boolean":cmdstr += " bit";break;case "Double":cmdstr += " float";break;case "String":cmdstr += " varchar(20)";break;case "Int32":cmdstr += " int";break;default:break;}if (i == primarykey)cmdstr += " primary key,";elsecmdstr += ",";}cmdstr = cmdstr.Remove(cmdstr.Length - 1);cmdstr += ")";SqlCommand cmd = new SqlCommand(cmdstr, sqlCnt);try{cmd.ExecuteNonQuery();Console.WriteLine("数据表创建成功。");}catch (SqlException ae){Console.WriteLine("数据表创建失败。" + ae.Message.ToString());return 0;}finally{sqlCnt.Close();//对数据库操作完成后,需要关闭数据库,释放内存}return 1;
}

4)删除表

public static int DeleteTable(string table){SqlConnection sqlCnt = new SqlConnection(connString);//1.连接     if (sqlCnt.State != ConnectionState.Open){sqlCnt.Open();}//2.定义SQL语句string cmdStr = "drop table " + table;SqlCommand cmd = new SqlCommand(cmdStr, sqlCnt);try{cmd.ExecuteNonQuery();Console.WriteLine("数据表删除成功。");}catch (SqlException ae){Console.WriteLine("数据表删除失败。" + ae.Message.ToString());return 0;}finally{sqlCnt.Close();//对数据库操作完成后,需要关闭数据库,释放内存}return 1;}

5)增加行

public static int InsertRow(string table, DataRow myRow)
{//************ 增加一行数据功能SqlConnection sqlCnt = new SqlConnection(connString);try{//1.连接             sqlCnt.Open();//2.读取表string cmdStr = "select * from " + table;SqlDataAdapter myDataAdapter = new SqlDataAdapter(cmdStr, sqlCnt);DataSet myDataSet = new DataSet();myDataAdapter.Fill(myDataSet);//3.添加一行 myDataSet.Tables[0].Rows.Add(myRow.ItemArray);//                    //4.将DataSet的修改提交至“数据库”SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(myDataAdapter);myDataAdapter.Update(myDataSet);//5.关闭myDataSet.Dispose();        // 释放DataSet对象myDataAdapter.Dispose();    // 释放SqlDataAdapter对象             sqlCnt.Dispose();           // 释放数据库连接对象mySqlCommandBuilder.Dispose();return 1;}catch(Exception ex){Console.WriteLine(ex.Message);return 0;}finally{sqlCnt.Close();             // 关闭数据库连接}
}

6)删除行

public static int DeleteRow(string table,string condition)
{    //1.连接SqlConnection sqlCnt = new SqlConnection(connString);string cmdStr = "Delete from " + table + " " + condition;SqlCommand MyCommand=new SqlCommand(cmdStr,sqlCnt);//"Delete from TestCrud where TestCrudId = 1003;"try{sqlCnt.Open();MyCommand.ExecuteNonQuery();             return 1;}catch(Exception ex){Console.WriteLine(ex.Message);return 0;}      finally{sqlCnt.Close();}
}

7)读取表

public static DataTable SelectTable(string table,string condition)
{//查表,返回一个DataTableSqlConnection sqlCnt = new SqlConnection(connString);sqlCnt.Open();string cmdStr = "select * from " + table + " " + condition;SqlDataAdapter myDataAdapter = new SqlDataAdapter(cmdStr, sqlCnt);DataSet myDataSet = new DataSet();myDataAdapter.Fill(myDataSet);DataTable myTable = myDataSet.Tables[0];myDataSet.Dispose();        // 释放DataSet对象myDataAdapter.Dispose();    // 释放SqlDataAdapter对象sqlCnt.Close();             // 关闭数据库连接sqlCnt.Dispose();           // 释放数据库连接对象return myTable;
}

8)修改行

public static int UpdateRow(string table,string condition)
{SqlConnection sqlCnt = new SqlConnection(connString);try{//打开数据库连接sqlCnt.Open();//创建SqlCommand对象string cmdStr = "UPDATE " + table + " " + condition;//"UPDATE TestCrud SET TestCrudName = '小红' WHERE TestCrudId = '1008';"SqlCommand command = new SqlCommand(cmdStr, sqlCnt);//执行SQL语句int rowsAffected = command.ExecuteNonQuery();return 1;}catch (Exception ex){//处理异常Console.WriteLine(ex.Message);return 0;}finally{//关闭数据库连接sqlCnt.Close();}
}

1.2.2 主程序调用

1)依赖

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

2)变量

DataTable dt = new DataTable();

3)DataGridView初始化

private void FormReportInit()
{dt.Columns.Add("c", typeof(bool));dt.Columns.Add("Id", typeof(int));dt.Columns.Add("Name", typeof(string));dt.Columns.Add("Min", typeof(double));dt.Columns.Add("Max", typeof(double));dt.Columns.Add("Value", typeof(double));dt.Columns.Add("Result", typeof(string));dataGridView1.DataSource = dt;dataGridView1.Columns["c"].Width = 20;dataGridView1.Columns["Id"].Width = 35;dataGridView1.Columns["Name"].Width = 70;dataGridView1.Columns["Min"].Width = 60;dataGridView1.Columns["Max"].Width = 60;dataGridView1.Columns["Value"].Width = 60;dataGridView1.Columns["Result"].Width = 60;Font font1 = new Font("", 10, FontStyle.Regular);dataGridView1.Font = font1;
}

4)创建表按钮事件

private void btn_CreateTable_Click(object sender, EventArgs e)
{            SQLHelper.CreateTable(tb_TableName.Text.ToString(),dt,1);//Id 是Primary key,值不能重复,重复写不进去
}

5)删除表按钮事件

private void btn_DeleteTable_Click(object sender, EventArgs e)
{SQLHelper.DeleteTable(tb_TableName.Text.ToString());
}

6)读表按钮事件

private void btn_ReadTable_Click(object sender, EventArgs e)
{dt = SQLHelper.SelectTable(tb_TableName.Text.ToString(), "");dataGridView1.DataSource = dt;
}

7)写入服务器事件

private void btn_WriteTable_Click(object sender, EventArgs e)
{foreach (DataRow myRow in dt.Rows){int ii = SQLHelper.InsertRow(tb_TableName.Text.ToString(), myRow);}               
}

8)删除行事件

private void btn_DeleteRow_Click(object sender, EventArgs e)
{//删除行int selectedRowIndex = dataGridView1.CurrentCell.RowIndex;int id = (int)dataGridView1.Rows[selectedRowIndex].Cells[1].Value;int ii = SQLHelper.DeleteRow(tb_TableName.Text.ToString(), "where id = " + id.ToString());//再读取一遍dt = SQLHelper.SelectTable(tb_TableName.Text.ToString(), "");dataGridView1.DataSource = dt;
}

9)修改行事件

private void btn_ModifyLine_Click(object sender, EventArgs e)
{//修改int selectedRowIndex = dataGridView1.CurrentCell.RowIndex;int id = (int)dataGridView1.Rows[selectedRowIndex].Cells[1].Value;string cmdstr = "set "+ "c = '" + dataGridView1.Rows[selectedRowIndex].Cells[0].Value.ToString() + "', "+"name = '" + dataGridView1.Rows[selectedRowIndex].Cells[2].Value.ToString() + "', "+ "Min = '" + dataGridView1.Rows[selectedRowIndex].Cells[3].Value.ToString() +"', "+ "Max = '" + dataGridView1.Rows[selectedRowIndex].Cells[4].Value.ToString() + "', "+ "Value = '" + dataGridView1.Rows[selectedRowIndex].Cells[5].Value.ToString() + "', "+ "Result = '" + dataGridView1.Rows[selectedRowIndex].Cells[6].Value.ToString() + "' "+ "where id = " + id.ToString();int ii = SQLHelper.UpdateRow(tb_TableName.Text.ToString(), cmdstr);//再读取一遍dt = SQLHelper.SelectTable(tb_TableName.Text.ToString(), "");dataGridView1.DataSource = dt;
}

1.3 运行

本次程序可以在DBTEST数据库中新建Table1表,可以删除表。

可以读取表中的内容,写入新添加的行(Id必须不同)。

可以修改鼠标光标选择行数据,也可以删除选择的行。

可以在SQL Server management studio中查询执行的结果。

本节是C#读写SQL的范例,可以用于参考使用,或者将其嵌入到自己开发的项目中。

http://www.dtcms.com/a/310574.html

相关文章:

  • 高效连接,3针M12航空插头助您畅行无阻
  • PSA 制氧装置和VPSA 制氧装置技术特点有什么不同
  • [VL|RIS] ReferSAM
  • windows电脑开机或重启,server不能自启动
  • 关税战火中的技术方舟:新西兰证券交易所的破局之道 ——从15%关税冲击到跨塔斯曼结算联盟,解码下一代交易基础设施
  • 开发后台管理系统的注意事项
  • 26考研|数学分析:曲线(面)积分·三大公式
  • Windows系统优化命令-记录
  • 全国增值税发票查验流程-批量核验-接口集成简便高效
  • 四、基于SpringBoot,MVC后端开发笔记
  • opencv-python的GPU调用
  • 在线免费的AI文本转语音工具TTSMaker介绍
  • U-Mail邮件系统-全面适配信创环境的国产邮件系统
  • 什么是大端?什么是小端?如何验证?
  • MySQL相关概念和易错知识点(3)(表内容的CURD、内置函数)
  • 基于CNN卷积神经网络图像识别28个识别合集-视频介绍下自取
  • Tushare 行情数据完整性同步算法
  • 三轴云台之热成像伪彩模式篇
  • 【Lua】题目小练7
  • Nestjs框架: 请求生命周期与应用生命周期
  • Vue模板语法详解:从基础到进阶的响应式绑定指南1
  • 工业数采引擎-DTU
  • CSS属性值计算规则:从声明到渲染的精确过程
  • 《C++》STL--list容器详解
  • 【读文献】Capacitor-drop AC-DC
  • 移除 Excel 文件(.xlsx)的工作表保护
  • Ubuntu 系统下使用 lsusb 命令识别 USB 设备及端口类型详解
  • 从“多、老、旧”到“4i焕新”:品牌官方商城(小程序/官网/APP···)的范式跃迁与增长再想象
  • 数据结构与算法——字典(前缀)树的实现
  • Rockchip RK3568J +FPGA边缘智能系统及储能网关