美文网首页
C#操作SQL Server

C#操作SQL Server

作者: Godan | 来源:发表于2019-12-07 23:12 被阅读0次

    本文介绍SQL Server基本的CRUD操作,参考了微软官方教程

    Create C# apps using SQL Server on Windows

    注意

    1. 本程序使用了demo数据库,请事先在SQL Server服务器上创建,或者将代码中的 sb.Append("use demo;"); 注释,注释后 students 表将会创建在master数据库中
    2. 本程序使用SQL Server2000服务器,搭建方式请参考 极简SQL Server 2000使用
    3. 本程序编译环境搭建方法请参考 C# 极简环境搭建
    /*
    MSSQL SERVER基本数据库操作示例
    1. 连接、关闭数据库
    2. CRUD(创建、读取、更新、删除)操作
    */
    
    using System;
    using System.Text;
    using System.Data.SqlClient;
    
    
    class Hello
    {
        static void QueryStudent(SqlConnection conn, String name)
        {
            Console.WriteLine("\n查询{0}同学的信息", name);
            String sqlText = "SELECT * FROM students WHERE name='" + name + "';";
            var cmd = new SqlCommand(sqlText, conn);
            // 可以使用 var 定义 reader
            // var reader = cmd.ExecuteReader();
            // 编译器将自行推导出reader的具体类型
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine("编号:{0} 姓名:{1} 班级:{2}", reader.GetInt32(0), reader.GetString(1), reader.GetString(2));
            }
            // 不再使用reader就关闭
            // 帮助文档 https://docs.microsoft.com/zh-cn/dotnet/api/system.data.sqlclient.sqldatareader?view=netframework-4.8
            reader.Close();
        }
    
        static void CreateTable(SqlConnection conn)
        {
            Console.WriteLine("\n创建学生表");
            var sb = new StringBuilder();
            // 如果demo数据库中存在students表,则删除它
            // 适用于SQL SERVER2016以下
            sb.Append("use demo;");
    
            sb.Append("IF OBJECT_ID(N'students', N'U') IS NOT NULL");
            sb.Append(" DROP TABLE students;");
            // 适用SQL SERVER2016及以上
            // sb.Append("DROP TABLE IF EXISTS students;");
    
            // 创建students表
            sb.Append("CREATE TABLE students(");
            // 字段id,类型int,自增(从1开始,递增1),不能为空,主键
            sb.Append("id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,");
            // 字段name,字符串类型(长度12个字符)
            sb.Append("name NVARCHAR(12),");
            // 字段class,字符串类型(长度16个字符)
            sb.Append("class NVARCHAR(16),");
            sb.Append(");");
    
            new SqlCommand(sb.ToString(), conn).ExecuteNonQuery();
            Console.WriteLine("创建学生表完成");
    
            sb.Clear();
            // 新增学生信息
            sb.Append("INSERT INTO students (name, class) VALUES('王小虎', '一年级4班');");
            sb.Append("INSERT INTO students (name, class) VALUES('周建军', '一年级1班');");
            sb.Append("INSERT INTO students (name, class) VALUES('胡苗', '一年级1班');");
            sb.Append("INSERT INTO students (name, class) VALUES('孙咚咚', '一年级2班');");
            // 执行新增操作
            var rowsAffected = new SqlCommand(sb.ToString(), conn).ExecuteNonQuery();
            Console.WriteLine("新增学生信息完成,影响行数:{0}", rowsAffected);
        }
    
        static void Main()
        {
            try
            {
                // 设置连接参数
                var builder = new SqlConnectionStringBuilder();
                // 主机地址
                builder.DataSource = "localhost";
                // 用户名
                builder.UserID = "sa";
                // 密码
                builder.Password = "";
                // 数据库名称 
                builder.InitialCatalog = "master";
    
                // 连接数据库服务器
                Console.WriteLine("连接到MSSQL服务器");
                // 用连接参数初始化连接对象
                var conn = new SqlConnection(builder.ConnectionString);
                // 打开连接
                conn.Open();
                Console.WriteLine("连接成功,当前数据库:{0}", builder.InitialCatalog);
    
                // 创建学生表
                CreateTable(conn);
    
                // 查询
                Console.WriteLine("\n查询学生表 students");
                var sb = new StringBuilder();
                // 添加字符串:使用demo数据库
                // 如果将 builder.InitialCatalog 设置为demo,use demo;这句就不需要
                sb.Append("use demo;");
    
                // 添加字符串:查询demo数据库下的students表里所有数据
                sb.Append("select * from students;");
    
                // StringBuilder.ToString() 拼接字符串
                // Console.WriteLine("sb拼接结果:{0}", sb.ToString());
    
                // SqlCommand 关联查询字符串sb与连接conn
                var cmd = new SqlCommand(sb.ToString(), conn);
                // cmd.ExecuteReader() 执行sql语句,并返回查询结果读取器reader
                var reader = cmd.ExecuteReader();
                //(逐行)遍历reader中所有数据
                while (reader.Read())
                {
                    // reader.GetInt32(0) 这里的0表示第1列(数组下标从0开始),同理 reader.GetString(1)中1表示第2列
                    // 每次循环,reader读取一行,比如:第1次循环中,readerGetInt32(0)读取的是 1行1列 的数据
    
                    Console.WriteLine("编号:{0} 姓名:{1} 班级:{2}", reader.GetInt32(0), reader.GetString(1), reader.GetString(2));
                }
                reader.Close();
    
                // 增加新学生到 students 表中
                // 复用sb对象,清空字符串内容
                Console.WriteLine("\n新增学生 王小川");
                sb.Clear();
                sb.Append("INSERT INTO students(name, class) VALUES('王小川', '三年级2班');");
                // 复用cmd对象,重新分配SqlCommand,原来(查询时)的引用自动丢失
                cmd = new SqlCommand(sb.ToString(), conn);
                int rowsAffected = cmd.ExecuteNonQuery();
                Console.WriteLine("查询结束,影响行数:{0}", rowsAffected);
    
                // 验证新插入的数据
                QueryStudent(conn, "王小川");
    
    
                // 修改王小川同学的班级
                Console.WriteLine("\n将王小川同学改为 二年1班");
                rowsAffected = new SqlCommand("UPDATE students SET class='二年级1班' where name='王小川';", conn).ExecuteNonQuery();
                Console.WriteLine("修改完毕,影响行数:{0}", rowsAffected);
    
                // 验证修改后的数据
                QueryStudent(conn, "王小川");
    
                // 删除王小川同学的信息
                Console.WriteLine("\n删除王小川同学的信息");
                rowsAffected = new SqlCommand("DELETE FROM students WHERE name='王小川';", conn).ExecuteNonQuery();
                Console.WriteLine("删除完毕,影响行数:{0}", rowsAffected);
    
                // 验证修改后的数据
                QueryStudent(conn, "王小川");
    
                // 不再使用conn就关闭
                conn.Close();
            }
            catch (SqlException e)
            {
                Console.WriteLine("数据库操作失败:{0}", e.ToString());
                return;
            }
        }
    }
    

    代码执行结果如下

    c:\csharp\sqlserver>csc CRUD.cs
    c:\csharp\sqlserver>CRUD.exe
    连接到MSSQL服务器
    连接成功,当前数据库:master
    
    创建学生表
    创建学生表完成
    新增学生信息完成,影响行数:4
    
    查询学生表 students
    编号:1 姓名:王小虎 班级:一年级4班
    编号:2 姓名:周建军 班级:一年级1班
    编号:3 姓名:胡苗 班级:一年级1班
    编号:4 姓名:孙咚咚 班级:一年级2班
    
    新增学生 王小川
    查询结束,影响行数:1
    
    查询王小川同学的信息
    编号:5 姓名:王小川 班级:三年级2班
    
    将王小川同学改为 二年1班
    修改完毕,影响行数:1
    
    查询王小川同学的信息
    编号:5 姓名:王小川 班级:二年级1班
    

    相关文章

      网友评论

          本文标题:C#操作SQL Server

          本文链接:https://www.haomeiwen.com/subject/qhepgctx.html