黑马程序员--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就先CLOSEDISPOSE

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培训、期待与您交流! -----------------------------------

原创粉丝点击