C#数据库教程2-ADO.NET常用SQL语句

8 篇文章 3 订阅

目录

1、ExecuteNonQuery插入SQL数据

2、ExecuteScalar查询SQL语句

3、插入数据后,查询 ID,获得自增字段的值

4、ExecuteReader执行查询

总结:

(1)数据类型对应

(2)sqlserver数据库字段出现空格字符问题

测试程序下载连接:


1、ExecuteNonQuery插入SQL数据

(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
            {

            }
        }

2、ExecuteScalar查询SQL语句

        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 { }
        }

查询结果

3、插入数据后,查询 ID,获得自增字段的值

之所以不用 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) 的数据库语句,可用来查询数据库表中数据总数。

4、ExecuteReader执行查询

(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语句

(1)数据类型对应

SQL                     C#

int                        int

bigint                    long(长int)

nvarchar               string

bit(0,1)                  bool

(2)sqlserver数据库字段出现空格字符问题

SQL 中定义:
char: 固定长度,存储ANSI字符,不足的补英文半角空格。

nchar: 固定长度,存储Unicode字符,不足的补英文半角空格

varchar: 可变长度,存储ANSI字符,根据数据长度自动变化。

nvarchar: 可变长度,存储Unicode字符,根据数据长度自动变化。

解决方案:
业务中字符主键类建议优先使用varchar,nvarchar。
如使用char,查询语句中最好trim下,防止业务中出现不必要的错误。

测试程序下载连接:

https://download.csdn.net/download/panjinliang066333/85143537

创作不易,请多多支持

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Big_潘大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值