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());
浙公网安备 33010602011771号