该措施执行更新语句,  Command对象在推行的的时候有多少个相比较重庆大学的艺术

新近下载了点资料,学了学Android,发现Android入门还算不难,从.NET过渡到Android,也就三七十一天的事。

壹 、ADO.NET中国共产党第五次全国代表大会指标理论

1、ExecuteNonQuery方法。
该方法执行更新操作,即与UPDATE、INSE中华VT、DELETE等说话有关的操作,在这种景色下,重返值是命令影响的行数。对其余语句,如SET或CREATE,则赶回-1,假如发生回滚,重返值也是-1。

大家有空也得以学学。。。

一 、Connection:与数据源建立连接。

2、ExcuteReader方法。
它与查询命令一道行使,重临三个数码阅读器对象SqlDataReader类的一个实例。该情势执行更新语句,执行成功后,不会回来任何受影响的数据行。

好了,言归正文,那日,有网上好友发了多个他们集团的数据层框架的DLL,让自个儿审视(Reflector查看如下):

② 、Command:对数据源执行SQL命令并赶回结果。

3、ExecuteScalar方法。
假如只想寻找数据库音信中的已个值,而不供给重返表或数额流方式的数据库新闻。例如,只需重回COUNT(*)、SUM(Price)或AVG(Quantity)等聚合函数的结果,该格局适合。假诺在一个例行的查询语句中调用该办法,则只读取第1行第②列的值,而抛开全体别的值

图片 1 

  Command对象在履行的的时候有多少个相比较首要的主意,如ExecuteNonQuery方法,执行增加和删除改命令。查询格局有2种:一个是ExecuteReader方法,重返二个DataReader对象。还有ExecuteScale方法,再次回到首行首列。

 

炸一看框架,帮忙的数据库系列繁多,看来写框架的人涉及面还挺广的。

三 、DataReader:读取数据源的数目,只同意对将数据源以只读、顺向的艺术查看里面所蕴藏的数额。

ExecuteReader:能够读一个表的笔录,只好读不能写

往里一看,相比较悲催,有广度而无深度,别的数据库类别的dll须求超前引用,那是一对一浩大的数据库工程:

  用于从数量源中检索只读数据集,并且必须有三番五次时才得以用。

ExecuteScalar:只好读一条记下,一般用来判定数据库是或不是有数量等,只好读不可能写

图片 2 

4、DataAdapter:数据适配器,对数据源执行操作并重返结果;

ExecuteNonQuery:能够写以能够读,

框架具体就然则多点评了,在不注意思间,本身看到有3个闪光点,觉的能够和大家分享分享:

  在DataSet与数据源之间创造通讯,将数据源中的数据写入DataSet中,或依据DataSet中的数据绑定数据源。

 首先,大家知道那四个东东应当是ADO.NET中对数据库中操作的CMD,大家清楚,即使大家要实行2个网让建设,必然在这么些进度中,我们终将要拓展与数据库的并行,我们要持续地展开数据库的读写,那么ExecuteNonQuery(),ExecuteReader()与ExecuteScalar()就是大家在对数据库进行操作时要用到的,上边小编来挨家挨户认识一下:

1:检测某列是还是不是存在: 

     
DataAdapter使用中重视有陆个指令对象相比较重大。它们各自是:SelectCommand、InsertCommand、UpdateCommand、DeleteCommand.

    ExecuteNonQuery():这一个东东能够让大家在立异数据库时不选择 DataSet
而使用 ExecuteNonQuery 更改数据库中的数据。通超过实际践 UPDATE、INSE酷路泽T 或
DELETE SQL语句就能够直达更改数据库中的数据目标。固然 ExecuteNonQuery
不回去任何行,映射到参数的输出参数或再次来到值照旧使用数据填充。但对于
UPDATE、INSEPRADOT 和 DELETE
SQL语句,再次回到的值正是受ExecuteNonQuery()命令影响的行数。对别的连串的讲话以及回退来说,再次回到的值都以-1。

图片 3

     
 SelectCommand,首假诺从数据库中搜索数据,InsertCommand、UpdateCommand、DeleteCommand这三个指令对象主要承担把地点数据集DataSet中的数据上传出服务器。

   Execute里德r():咱们见惯司空在asp中用Recordset对象来从数据库中读出多少,并且用循环语句来一个1个的读出多少,但在我们的ADO.NET中,大家即使用DataReader
对象的ExecuteReader()方法来展开数量的列出,并且我们用这些ExecuteReader()方法来显示数据是最快的一种办法,因为当大家在用ExecuteReader()方法中的DataReader
对象来展开多少的在网站建设中展现时,他只能一条一条向前读,无法回来,也正是像ASP中的ADO方法中的Recordset
对象的Movenext一样,他从不move -1那样的回到方法。

2:检查和测试某表是还是不是留存: 

     
 DataAdapter的Fill方法,用于采纳DataAdapter的SelectCommand的结果来填充DataSet。

    ExecuteScalar():这种CMD也等于大家在ADO中用SQL语句中运用部分乘除函数的意义雷同,在那里大家只是重回全数影响的行数的首先行第壹列数据,那样也正是一定于专业为我们的如:select
count(*) from database的职能雷同,大家可以用

图片 4 

伍 、DataSet:内部存款和储蓄器中的数据库,是数据表的聚合,它能够分包自由四个数据表。

string sql=”select * from  database”

这是一条判断某字段列和某表是还是不是存在的章程,此处用了select X from
table的措施,然后调用了GetSingle(sql)。

   是ADO.NET的中坚,也就是当地数据库,它与数据库非亲非故的,它和长距离数据库连接的桥梁正是.NET数据提供程序。它是由七个表组成,每种表都以3个DataTable对象。

SqlCommand cmd=SqlCommand(sql,conn)

而 GetSingle的代码如下:

   
DataSet中重点的靶龙时DataTable,每一列都以DataColumn对象,每一行都以叁个DataRow对象。在里边能够进入一些羁绊,2个是UniqueConstraint(唯一约束),八个是ForeignKeyConstraint(外键约束)。

int i=(int)cmd.ExecuteScalar()

图片 5 

   
DataSet上边有多少个重庆大学的联谊,2个是DataTables,三个是DataRelations.DataTables里面放置的都以DataTable对象。

那般我们的部分变更i的值正是与地点笔者的效果一样.

代码里,关于ADO.net的有关对象没提高到全局变量以重用那一个不是讲的主要,就先忽略先,今天享受的知识点是ExecuteScalar:

 

    最终值得一说的是:那是发源小编平时所用的时候的一部分认识:那正是一旦大家在开始展览数量操作时,假使没有数量可操作,那么我们只好使用ExecuteReader()那些CMD,而executeNoeQuery()与Executescalar()借使在没有数据的时候利用时,就会出错“对像没有实例化”的一无所能。所以大家在认清是还是不是有数据时,只可以够用ExecuteReader()中的REad()方法来检查和测试。

对此ADO.NET的Command命令,有八个艺术,大伙很熟识:

关系图:

 

 

1:ExecuteDataReader,重回数据流,用于列表读取。
2:ExecuteScalar,再次回到首行首列。
3:ExecuteNonQuery,重临首震慑的行。

 

 

图片 6

解说: 

 

 

 

一旦大家从语义上讲,用ExecuteScalar执行一条select * from table,只回去首行首列,看似还过的去,然实际不然。
实在,前面的ExecuteScalar,或是ExecuteNonQuery,内部都是调用的ExecuteDataReader来处理的,见如下代码即知:

二、实践

 

  那里将对数据库的操作差不多分成两类,一类是对数据库的询问,须求回到查询数据。一类是对数据库的增、删、改,不要求回到查询数据。下边就以那两类,结合实例证实。

图片 7 

询问:从上海教室中能够见到,想获取查询结果有三种办法:

表达分析: 

  • 通过Command对象的ExecuteScalar方法(),可是那种艺术只可以回去由询问重回的结果集中的率先行的率先列,并且其再次来到值为object类型,其余列或即将被忽略。
    ExecuteScalar()通常应用于当要求重返单一值时的场馆。例如你刚插入一行数据,想要登时通晓它的ID号,则足以使用ExecuteScalar()方法。通过MSDN给出的2个例证表达。

微软并从未什么样特殊照顾,所以本来的语句,仍会到数据Curry,按语句的渴求,并找出全数满足条件的数据流举行再次回到。
本来,值的安慰的是,DataReader是二个流数据传输,它并不是二回性传输全数数据,而是部分段传输。

 

 

static public int AddProductCategory(string newName, string connString)
{
    Int32 newProdID = 0;
    string sql = "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "+ "SELECT CAST(scope_identity() AS int)";
    using (SqlConnection conn = new SqlConnection(connString))
    {
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.Add("@Name", SqlDbType.VarChar);
        cmd.Parameters["@name"].Value = newName;
        try
        {
            conn.Open();
            newProdID = (Int32)cmd.ExecuteScalar();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    return (int)newProdID;
}

中档笔者做了1个小测试,大体进程是那样的:

 

使用DataReader去读取数据重回2个SqlDataReader,然后断点,接着把数据库服务给停了,然后继续调节和测试,发现数目还能够健康读取。
证实还未读取之时,部分数据就先通过管道把数据从数据库传输到程序的内部存款和储蓄器中了,后来按F5继续,读取后边就会抛进度管道已关闭的荒唐。

  • 透过DataReader对象收取Command对象的ExecuteReader方法()的再次回到值,DataReader从数据库中摸索只读、只进的数据流。
    使用DataReader能够增进应用程序的质量,原因是它一旦数据可用就当下搜索数据,并且(私下认可情形下)1次只在内部存款和储蓄器中蕴藏一行,减弱了系统开发。上边是MSDN实例。

 

 

总结:

private static void ReadOrderData(string connectionString)
{
    string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;";//sql语句
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(queryString, connection);
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();
        try
        {
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}, {1}",reader[0], reader[1]));
            }
        }
        finally
        {
            // 读完数据后,调用关闭
            reader.Close();
        }
    }
}

本文评释两点选拔方法上的两点:

 

1: 本来是Top 1 的话语,结果变成Select *,这两条语句在数据库端执行,质量的差距不说大伙也懂了。
2: ExecuteScalar即使是再次来到首行首列,但其实再次来到的是个DataReader,借使您询问的是列表,实际上内部存款和储蓄器传输了列表,只是最后你程序读取了列表中的第1个字节。
理所当然了,由于流的传导,并不二遍性传输整体,只是部分段传输,所以质量的损失并不是太精晓。 

  • 经过DataAdapter对象将查询到的多寡填充到DataSet中。

 

 

 

private void Button_Click(object sender, RoutedEventArgs e)
{
            string conStr = "";//连接字符串
            using (SqlConnection conn = new SqlConnection(conStr))
            {
                conn.Open();//打开连接
                string sql = "";//sql语句
                SqlDataAdapter sda = new SqlDataAdapter(sql,conn);//实例化SqlDataAdapter对象
                DataSet ds = new DataSet();
                sda.Fill(ds);//填充数据集
            }
}

要写好底层框架,任重(Ren Zhong)而道远,望大家再接再励。 

 

累加、修改、删除,从上海体育地方中能够看看,有三种办法:

 

  • 经过Command对象的ExecuteNonQuery 方法 (),能够应用
    ExecuteNonQuery来进行目录操作(例如查询数据库的组织或创建诸如表等的数据库对象),或透超过实际施
    UPDATE、INSETiguanT 或 DELETE 语句。

 

private static void CreateCommand(string queryString,string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(queryString, connection);
        command.Connection.Open();
        command.ExecuteNonQuery();
    }
}

图片 8

 

  • 选拔DataSet来更数据库中的数据。

 

static private DataSet UpdateDataSet(string connectionString)
{
    DataSet dataSet = new DataSet();//实例化数据集dataset
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();//打开连接
        SqlDataAdapter adapter = new SqlDataAdapter();//实例化SqlDataAdapter对象
        SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
        adapter.Fill(dataSet);//填充数据集dataset
        dataSet.Tables[0].Rows[0][0] = 2;//修改数据
        adapter.Update(dataSet);//更新dataset
    }
    return dataSet;
}

 

相关文章