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("新增成功!");
}
}