黑马程序员--ADO.NET知识小结
来源:互联网 发布:win10网络飞行模式 编辑:程序博客网 时间:2024/05/16 12:33
-------------------------------------------- ASP.Net+Android+IO开发、.Net培训、期待与您交流! -----------------------------------
ADO.NET
ADO.NET中的连接等资源都实现了IDisposable接口(在使用要进行资源的释放,最简单的是使用using(SqlConnection这个对象)),可以使用using进行资源管理
。执行备注中的代码如果成功了就OK
例子:
Using(SqlCommand cmd =conn.CreateCommand())
{
Cmd.CommandText=”insert into tb_1(name) values(‘nihao’)”;
Cmd.ExcuteNonQuery();
}
Conn.dispose()后就无法再进行 conn.open()
conn.close()后还可以进行conn.open()
dispose相当于直接销毁不能再次利用
using在出了作用域以后调用DISPOSE内部都会做这样的判断,判断有没有CLOSE,如果没有CLOSE就先CLOSE再DISPOSE
excutescalar:返回的是一个object类型
Insert into语句也可以用excutescalar 返回的值是
刚插入的这一行的(主键值)ID
例子:
Insert into t_1(username,password) output inserted.Id values(‘admin’,’0000’)
Int id=Convert.ToInt32(cmd.executescalar());
Reader.GetString(reader.GetOrdinal(“UserName”));
GetOrdinal:根据列名动态得到序号
防止SQL注入漏洞:
Select count(*) from tb_1 where username=@Username and password=@password
Cmd.Paramaters.add(new SqlParameter(“Username”,username));
数据库的新建:
添加---添加新项----数据----基于服务的数据库
(本地数据库)是与手机开发相关的
--------------------------------------------------------------------
数据的导入与导出
OpenShowDialog
代码示例:
If(osd.ShowDialog()==DialogResult.OK)
{
Using(FileStream fileStream = File.OpenRead(osd.FileName)))
{
Using(StreamReader streamReader = new StreamReader(fileStream))
{
String line = null;
While((line = streamReader.ReadLine() != null)//如果成立说明一直有数据
{
String[] strs = line.Split(‘|’);
String name = strs[0];
Int age =strs[1];
Using(SqlConnectionconn = new SqlConnection(“”))
{
Conn.open();
Using(SqlCommandcmd =conn.CreateCommend())
{
Cmd.CommandText=”;
}
}
}
}
}
}
上面的代码的缺点:数据库的打开操作是很耗时的所以将数据库打开放在了循环中是很不合理的(注意::每一个SqlCommend对应一个查询语句)
Using(SqlConnection conn =new SqlConnection(“”))
{
Conn.open();
Using(SqlCommandcmd =conn.CreateCommend())
{
String line = null;
While((line = streamReader.ReadLine() !=null)//如果成立说明一直有数据
{
String[] strs = line.Split(‘|’);
String name = strs[0];
Int age=strs[1];
Cmd.Parameters.Clear();//参数不能重复添加,在while中一直用的就是一个SqlCommend对象
Cmd.CommandText=”;
}
}
Class Person
{
Pulic string Name{get;set;}
Pulic int age {get;set;}
Pulic override string ToString()//覆盖ToString()的方法
{
ReturnName;
}
}
Person p1 = new Person()
P1.Name=””;\
P1.Age=30;
ckb.Items.A(p1);//此句代码实际上是加上的 p1.ToString()
上面的分析:当我们把一个对象添加到Items中的时候实际上
就是这个类的ToString()方法:(一般情况下就是默认的这个类的类名)
(解决方法就是在这个类中进行对ToString()方法的覆盖就可以了)
另一个方法:
对于 ComeBox控件:
设定DisplayMember中的值
另一个例子:
(ComeBox中的每一个SelectedItem可以是一个对象)
例如:
Person p1=(person)cmb.SelectedItem;
如果插入数据(带有汉字)时有乱码时 汉字前面加上一个N
配置文件写连接字符串:
<connectionStrings>
<add name=”ConnStr” connectionString=””/>
</connectionStrings>
引用读取配置文件的类:system.configration
之后就可以读取了
ConfigurationManager.ConnectionStrings[“ConnStr”].ConnectionString;
C#中扫描文件的方法代码:
按照通配符搜索目录下的文件:
String[] Directory.GetFiles(string path,string SearchPattern,SearchOption searchoption)
(路径,通配符,(有子文件来、无子文件夹)
Path.GetFileNameWithoutExtension(filename),得到文件的文件名(不要扩展名);
Path.Combine(string path1,string path2),将两个路径合并
Path.GetExtension(string path),得到文件的文件的后缀
Path.GetFileName(string path),得到文件的文件名
Path.GetFullPath(string path),得到文件的全路径
streamReader比较适合读取比较大的数据
一般小的文件可以用File.ReadAllLines(File);
一般常用的是这样的File.GetFileNameWithoutExtension(file);
File.ReadAllLines(file,Encoding.Default);//此处是为了防止出现乱码
示例:扫描文件夹中的文件中的内容的示例
FolderBrowserDialog fbd = new FolderBrowserDialog();
if(fbd.ShowDialog() !=DialogResult.OK)
{
return;
}
stringpath = fbd.SelectedPath;
stringconnstr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
string[]files = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories);
using(SqlConnection conn =newSqlConnection())
{
conn.Open();
using(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "insert into studb(num1,num2,name)values(@num1,@num2,@name)";
foreach(string fileinfiles)//此处的file得到的是全路径
{
string filename =Path.GetFileNameWithoutExtension(file);//得到文件的纯文件名
string[] lines =File.ReadAllLines(file,Encoding.Default);//因为数据太少了所以用这个而没有必要用 SqlDataReader
foreach (string linein lines)//读出某一文件中的一行数据
{
string[] strs = line.Split('-');
string num1 = strs[0];
string num2 = strs[1];
string name = strs[2];
cmd.Parameters.Clear();//防止每次调用时都加参数导致参数混乱
cmd.Parameters.Add(newSqlParameter("@num1", num1));
cmd.Parameters.Add(newSqlParameter("@num2", num2));
cmd.Parameters.Add(newSqlParameter("name", name));
cmd.ExecuteNonQuery();
}
}
}
}
-------------------------------------------- ASP.Net+Android+IO开发、.Net培训、期待与您交流! -----------------------------------
- 黑马程序员--ADO.NET知识小结
- 黑马程序员--学习ado.net小结
- 黑马程序员---ADO.Net学习小结
- 黑马程序员--ADO.NET小结(上)
- 黑马程序员--ADO.NET小结(下)
- 【黑马.net程序员】学习ADO.net和SQL知识总结
- 黑马程序员-Ado.Net
- 黑马程序员-ADO.Net
- 黑马程序员-ADO.NET
- 黑马程序员 ADO.net
- 黑马程序员-ADO.net
- 黑马程序员-----ADO.NET
- 黑马程序员--ADO.NET
- 【黑马程序员】ADO.NET
- 【黑马程序员】ADO.net
- 黑马程序员 ado.net
- 黑马程序员-004ADO.NET的琐碎知识
- 【三层】ADO.Net 知识小结
- API
- 珍惜自己的生命
- 循序渐进DB2(第2版)——DBA系统管理、运维与应用案例
- mysql中pager命令妙用
- Android LCD(三):Samsung LCD接口篇
- 黑马程序员--ADO.NET知识小结
- Oracle12C体系架构
- SSI集成下mybatis执行存储过程
- MSSQL 2005 SQL利用Case When Then多条件判断
- Android LCD(四):LCD驱动调试篇
- Oracle 客户端连接时报ORA-01019错误总结
- [网络] SOCKET, TCP/UDP, HTTP, FTP
- TLS--线程局部存储
- 2440ping不通主机和虚拟机