目录
1、ExecuteNonQuery插入SQL数据
2、ExecuteScalar查询SQL语句
3、插入数据后,查询 ID,获得自增字段的值
4、ExecuteReader执行查询
总结:
(1)数据类型对应
(2)sqlserver数据库字段出现空格字符问题
测试程序下载连接:
(using用完以后自动释放,而使用close或者Dispose这些在出现异常得时候不会释放内存资源导致数据库越来越慢)
private void btnInsert_Click(object sender, EventArgs e)
{
try
{
//SqlConnection为建立和数据库连接得对象
using (SqlConnection conn = new SqlConnection("Data Source=127.0.0.1; Initial Catalog=MyTest;User=sa;Password=54085408"))
{
conn.Open(); //打开连接
//通过连接创建一个向数据数据库发送命令(Command)得对象SqlCommand
using (SqlCommand cmd = conn.CreateCommand())
{
//CommandText为要执行得sql语句
cmd.CommandText = "insert into tbl_student(Name,Age,Comment) output inserted.ID values('Li',20,'WoMan')";
//ExecuteNonQuery一般用来执行UpDate、Delete、Insert、语句
cmd.ExecuteNonQuery(); //执行
}
}
MessageBox.Show("执行完成");
}
catch
{
}
}
private void btnFind_Click(object sender, EventArgs e)
{
try
{
//SqlConnection为建立和数据库连接得对象
using (SqlConnection conn = new SqlConnection("Data Source=127.0.0.1; Initial Catalog=MyTest;User=sa;Password=54085408"))
{
conn.Open(); //打开连接
//通过连接创建一个向数据数据库发送命令(Command)得对象SqlCommand
using (SqlCommand cmd = conn.CreateCommand())
{
//CommandText为要执行得sql语句
cmd.CommandText = "select count(*) from tbl_student where Age<100";
//object obj = cmd.ExecuteScalar();
//ExecuteScalar一般用来执行有且只有一行一列返回值的SQL语句
int i = (int)cmd.ExecuteScalar();
MessageBox.Show("Age<100的数据共:" + i.ToString() + "行数据");
}
}
MessageBox.Show("执行完成");
}
catch { }
}
查询结果
之所以不用 select MAX(ID) from tbl_student,是因为在大型的项目中,可能会有很多数据实时的插入进来,从而导致获取的数据并不是最大的。
private void btnSelectCount_Click(object sender, EventArgs e)
{
try
{
//SqlConnection为建立和数据库连接得对象
using (SqlConnection conn = new SqlConnection("Data Source=127.0.0.1; Initial Catalog=MyTest;User=sa;Password=54085408"))
{
conn.Open(); //打开连接
//通过连接创建一个向数据数据库发送命令(Command)得对象SqlCommand
using (SqlCommand cmd = conn.CreateCommand())
{
//CommandText为要执行得sql语句
cmd.CommandText = "insert into tbl_student(Name,Age) output inserted.ID values('Li',123)";
//object obj = cmd.ExecuteScalar();
//ExecuteScalar一般用来执行有且只有一行一列返回值的SQL语句
long i = (long)cmd.ExecuteScalar();
MessageBox.Show("当前插入数据共:" + i.ToString() + "行");
}
}
MessageBox.Show("执行完成");
}
catch { }
}
提示:insert into tbl_student(Name,Age) output inserted.ID values('Li',123) 的数据库语句,可用来查询数据库表中数据总数。
(1)ExecuteReader()用来执行一条查询结果为表值结果集的select语句 ,它返回一个SqlDataReader类型的对象。
(2)SqlDataReader不直接存储数据,它只是一个指挥棒,它的作用与foreach那个指针非常类似。
(3)SqlDataReader只能从前往后读,不能往回退。由于数据并不是真正读到了.NET程序的内存空间里,所有,通过SqlDataReader读取数据时必须保证SqlDataReader对象一直处于连接状态。
(4)另外,SqlDataReader只能读取数据,不能修改数据
private void btnSqlDataRead_Click(object sender, EventArgs e)
{
try
{
//SqlConnection为建立和数据库连接得对象
using (SqlConnection conn = new SqlConnection("Data Source=127.0.0.1; Initial Catalog=MyTest;User=sa;Password=54085408"))
{
conn.Open(); //打开连接
//通过连接创建一个向数据数据库发送命令(Command)得对象SqlCommand
using (SqlCommand cmd = conn.CreateCommand())
{
//CommandText为要执行得sql语句
cmd.CommandText = "select * from tbl_student where Age<100";
using(SqlDataReader rd=cmd.ExecuteReader())
{
while(rd.Read())
{
string name = rd.GetString(1); //1表示数据表的第一列
int age = rd.GetInt32(2); //2表示数据表的第二列
string comment = rd.GetString(3); //3表示数据表的第三列
MessageBox.Show(name + "," + age.ToString() + "," + comment);
}
}
}
}
}
catch { }
}
运行结果
(1)ExecuteNonQuery一般用来执行UpDate、Delete、Insert、语句
(2)ExecuteScalar一般用来执行有且只有一行一列返回值的SQL语句
SQL C#
int int
bigint long(长int)
nvarchar string
bit(0,1) bool
SQL 中定义:
char: 固定长度,存储ANSI字符,不足的补英文半角空格。
nchar: 固定长度,存储Unicode字符,不足的补英文半角空格
varchar: 可变长度,存储ANSI字符,根据数据长度自动变化。
nvarchar: 可变长度,存储Unicode字符,根据数据长度自动变化。
解决方案:
业务中字符主键类建议优先使用varchar,nvarchar。
如使用char,查询语句中最好trim下,防止业务中出现不必要的错误。
https://download.csdn.net/download/panjinliang066333/85143537
创作不易,请多多支持