1.在SQL中,先创建数据库和表
create database Mycar; use Mycar; create table Car ( Id int primary key identity(1,1), --设置编号,从1开始自增,每次加1 Title nvarchar(128) not null, --设置车名不能为空 Speed int default(0), --最大速度 info ntext --详细信息 ) insert into Car(Title,Speed,info) values ('BYD',130,'比亚迪') insert into Car(Title,Speed,info) select 'BMW',150,'宝马' union select 'CYJ',180,'cyj'
2.studio中实现,连接数据库,注意添加命名空间
private void btnConnection_Click(object sender, EventArgs e) { //创建连接对象,指定连接字符串 SqlConnection conn = new SqlConnection("Data Source=DESKTOP-BEUJ3C4;Initial Catalog=MyCar;User ID=sa;Password =2323010676;"); conn.Open(); MessageBox.Show("打开数据库成功,状态"+conn.State ); conn.Close(); MessageBox.Show("关闭数据库成功"); }
3.设计界面,并添加事件,并了解数据库两个打开关闭的方式
private void btnAdd_Click(object sender, EventArgs e) { //用usring在括号内结束后,关闭数据库 using (SqlConnection conn = new SqlConnection("Data Source=DESKTOP-BEUJ3C4;Initial Catalog=MyCar;User ID=sa;Password =2323010676;")) { conn.Open(); //新建命令 //将执行的sql,利用占位符,将输入到txtName中的Text信息替换为占位符位置的信息 String sql = String.Format("insert into Car(Title,Speed,info) values ('{0}',{1},'{2}')",txtName.Text,txtSpeed.Text,txtInfo.Text); //创建命令对象,前面一个表示执行的语句,后面一个表示执行语句需要连接的数据库 SqlCommand cmd = new SqlCommand(sql,conn); //执行,返回影响行数 int rows = cmd.ExecuteNonQuery(); if(rows > 0) { MessageBox.Show("新增成功!"); } } }
4.上面添加的是用的占位符,不安全,可以使用参数输入,更加安全
using (SqlConnection conn = new SqlConnection("Data Source=DESKTOP-BEUJ3C4;Initial Catalog=MyCar;User ID=sa;Password =2323010676;")) { conn.Open(); //这里用参数代替占位符,[Title]中的[]表示防止重名的发生 String sql = String.Format("insert into Car([Title],[Speed],[info]) values (@Name,@Speed,@Info)"); //创建命令对象,前面一个表示执行的语句,后面一个表示执行语句需要连接的数据库 SqlCommand cmd = new SqlCommand(sql,conn); //指定参数 cmd.Parameters.Add(new SqlParameter("@Name",txtName.Text)); cmd.Parameters.Add(new SqlParameter("@Speed", txtSpeed.Text)); cmd.Parameters.Add(new SqlParameter("@Info", txtInfo.Text)); //执行,返回影响行数 int rows = cmd.ExecuteNonQuery(); if(rows > 0) { MessageBox.Show("新增成功!"); } }