sqlserver编程笔记



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;


namespace 我的第一个MDF
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             * 
             *让程序去连接项目中的mdf文件,而不是连接bin/Debug下那个。
             *
             *
             *原理简单分析:连接字符串中的DataDirectory的值就是通过AppDomain.CurrentDomain.SetData赋值过去
             *的,如果当前程序的目录以"\bin\Debug\"或者"\bin\Release\"则认为它是运行在VisualStudio环境中,
             *就取项目的目录然后赋值给DataDirectory这个key。
             *既然是CurrentDomain.SetData,
             *估计对于非默认AppDomain中的数据库连接代码可能会不起作用(只是猜测,没验证),
             *这就要需要创建子AppDomain的时候再去赋值了。
             * 
            */

            string dataDir = AppDomain.CurrentDomain.BaseDirectory;
            if (dataDir.EndsWith(@"\bin\Debug\")
            || (dataDir.EndsWith(@"\bin\Release\")))
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
                AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
            }
          //  Console.WriteLine(dataDir);


            /*连接字符串  告诉程序连接到哪台服务器上 
             *Data Source=.\SQLEXPRESS 本机的数据库的名字 
             * AttachDBFilename=|DataDirectory|\Database1.mdf 项目目录下的mdf文件
             * Integrated Security=True 使用windows验证方式登录数据库
             * User Instance=true 使用用户实例
             * 用户实例是对实例的扩展。用户实例与普通实例类似,但它是在需要的时候创建,而普通实例是在安装期间创建的。
               用户实例必须由父实例创建,所以使用用户实例时,我们也不能省略 Data Source。
               谁打开了数据库连接,谁就是这个用户实例的运行帐户,比如 IUSR_Cftea 运行着网站,
             * 它打开了带用户实例的数据库连接,那么这个用户实例就是以 IUSR_Cftea 运行的。
             
             * 由于 SqlConnection中实现了IDisposable 接口 
             * 此接口的主要用途是释放非托管资源。 当不再使用托管对象时,垃圾回收器会自动释放分配给该对象的内存。 但无法预测进行垃圾回收的时间。 
             * 另外,垃圾回收器对窗口句柄或打开的文件和流等非托管资源一无所知。
               对于有IDisposable接口的类,需要使用try catch或者 using 来保证资源的回收。
             */
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
            AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=true"))
            {
                conn.Open();//打开连接
                Console.WriteLine("打开数据库连接成功");

                //创建sql命令 依然需要使用using来保证资源的回收
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from T_User";

                    using (SqlDataReader reader = cmd.ExecuteReader()) 
                    {
                        while (reader.Read()) //每调用一次read方法 就向下读一行数据。读不到数据了返回false
                        {
                            //Console.WriteLine(reader.GetString(1) + reader.GetString(reader.GetOrdinal("Password")));
                            //reader.GetString(i)得到某一列的值 i是列号
                            //reader.GetOrdinal("Password") 获得序号
                            int id =  reader.GetInt32(reader.GetOrdinal("Id"));
                            string username = reader.GetString(reader.GetOrdinal("UserName"));
                            string password = reader.GetString(reader.GetOrdinal("Password"));
                            Console.WriteLine(id + " " + username + " " + password);

                        }
                    }
                }

            }


            Console.ReadKey();


        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值