导航

黑马程序员----ado.net

Posted on 2011-12-02 18:44  asp.net 开发  阅读(156)  评论(0)    收藏  举报

ado.net笔记:

1、同步数据库代码:

string dataDir = AppDomain.CurrentDomain.BaseDirectory;

            if (dataDir.EndsWith(@"\bin\Debug\") || dataDir.EndsWith(@"\bin\Release\"))

            {

                dataDir = Directory.GetParent(dataDir).Parent.Parent.FullName;

                AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);

            }

2、表名不能与关键字冲突,如果冲突就在表名上就加一个[],为了避免冲突写表名时,表名前加T_,关键字前就加F_。

3、cmd.ExecuteScalar返回表中的第一行第一列数据,数据类型是object类型。

4、reader.GetOrdinal("PassWord")根据列名动态得到序号。

5、reader.Read()方法返回值是bool类型。

6、conn.close()关闭后还可以打开;conn.dispose()是直接销毁,之后不可以打开.using在出了作用域后调用dispose,Sqlconnection、FileStream等的Dispose内部会做这样的判断:判断有没有close,如果没有close就先close再dispose。

7、链接字符串

using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Mytest1.mdf;Integrated Security=True;User Instance=True"))

配置文件中的链接字符串:<add name="MyBBSConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Mytest1.mdf;Integrated Security=True;User Instance=True"/>

8、SQL注入攻击万能密码:1' or '1'='1

9、在同一个链接中,如果SqlDataReader没有关闭,那么是不能执行Updata之类的语句的。

10、设定comboBox的Display属性为name,就会显示对象的name属性的值。

11、varchar(50)与nvarchar(50)的区别:数据是英文时用varchar(50),数据是中文时用nvarchar(50);如果插进去的中文还是乱码就在单引号前加N(用记事本的替换功能:’中国’改成N’中国’)。

12、链接字符串用配置文件,要引用using System.configuration,读取字符串:string conStr=configurationManager.ConnectionStrings[“Constrs”].ConnectionString;中括号里面的内容是链接字符串的name属性。

13、File.ReadAllLines()方法的默认编码方式是UTF8,所以会有乱码现象,可以用File.ReadAllLines(file,Encoding.Default)重载方法解决,此方法会一次性的将文件内容加载到内存,当文件太大时应考虑用StreamReader()

14、string[] files = Directory.GetFiles(path,"*.txt",SearchOption.AllDirectories); 按照通配符搜索目录下的文件

    Path.GetNameWithoutExtension(filename),得到文件的文件名(不要扩展名);

Path.Combine(string path1,string path2),将两个路径合并;

Path.GetExtension(string path)得到文件的扩展名;

Path.GetfileName(string path)得到文件名(包括扩展名);

Path.GetFullName(string path)得到文件的全路径

15、params关键字是可变参数,例如:public static ExecuteNonQuery(string sql,params SqlParameter[] parameters)

16、SqlDataReader是链接相关的,SqlDataReader中的查询结果并不是放到程序中的,而是放在数据库服务器中,SqlDataReader只是相当于放了一个指针(游标),只能读取当前只想的行,一旦链接断开就不能再读取。这样的好处是无论查询多少条,对程序占用的内存都几乎没有影响。所以SqlDataReader对于小数量的数据来说带来的只有麻烦,有点可疑忽略不计;这时要考虑用DataSet数据集(封装时不要用SqlDataReader)

17、new SqlParameter("ID",0)是一个陷阱,应改成new SqlParameter("ID",(object)0)

18、int?→可空的int,解决数据库和c#对于int是否可以为null的不同设置的

19、进行类型化DataSet批量操作要先打开链接,操作完之后再关闭链接:adapter.Connection.Open();

20、Count、Length属性是元素的总数量(比如一个数组有10个元素,其下标为0~9,Count、Length属性的值是10)

21、将textBox绑定到数据源:

Binding DBbinding = new Binding("Text", ds.Tables[0], "Age");

            textBox1.DataBindings.Clear();

            DBbinding.WriteValue();

            textBox1.DataBindings.Add(DBbinding);

21、每次实例化一个新窗口都是新建一个窗口,即新增一个窗口,关闭程序时应该关闭第一个实例化的窗口。

22、得到自动增字段的主键值,在values关键字前加上output inserted.Id,其中Id为主键字段名,执行结果就得到插入的主键值,用ExecuteScalar执行最为方便,如:cmd.CommandText=”insert into T_User(UserName,Password) ouput inserted.Id values(‘admin’,’88888’)”;int i=Convert.into32(cmd.ExecuteScalar());