NET查询和访问数据库,Winform基础程序和ADO
分类:web前端

诚如大家是执行 insert into 的 SQL 语句,再进行 select 的 SQL 语句用以获取刚才插入的记录的 ID,犹如有一点麻烦,其实大家把三个 SQL 语句一同推行。

SqlCommand对象以至哪些运用它与数据库人机联作

1.什么是command对象
2.怎么使用ExecuteReader方法查询数据
3.什么使用ExecuteNonQuery方法插入和删除对象
4.什么样使用EXecuteScalar方法再次回到单朝气蓬勃值

SqlCommand对象允许你钦命在数据库上实践的操作的种类。例如,你可以对数据库中的行数据举办select,insert,modify以至delete命令。SqlCommand对象能被用来扶助断开连接数据管理的气象,可是在此节课大家将只单独采纳SqlCommand对象。后面关于SqlDataAdapter的学科将解释怎样选取断开数据完毕应用程序。那节课将同有的时候候呈现怎么样从数据库中回到二个单独的值,比如表中记录的数码。

创建SqlCommand对象

SqlCommand cmd = new SqlCommand("select CategoryName from Categories", conn);

地方意气风发行是卓绝的实例化SqlCommand对象的代码。它使用一个string参数来保存你想要奉行的授命以至叁个关于SqlConnection对象的援引。SqlCommand具备重载方式,这一个格局你就要这里后的示范中观望。

询问数据

当使用SQL的select命令,会获取风姿洒脱组数据集。为了和SqlCommand对象合作使用,你应当使用ExecuteReader方法,它回到三个SqlDataReader对象。大家将要前边的内容商量SqlDataReader。下边包车型地铁例子展现了什么样运用SqlCommand对象来获得SqlDataReader对象:

// 1. Instantiate a new command with a query and connection

SqlCommand cmd = new SqlCommand("select CategoryName from Categories", conn);

// 2. Call Execute reader to get query results

SqlDataReader rdr = cmd.ExecuteReader();

在上头的演示中,大家因而传递命令字符串核连接对象到布局函数的法子实体化了SqlCommand对象。然后大家经过SqlCommand对象cmd调用ExecuteReader方法得到了SqlDataReader对象。

这个代码是表1中ReadData方法的生机勃勃有个别,大家将在前面集中介绍。

插入数据

要对数据库插入数据,使用SqlCommand对象的ExecuteNonQuery方法。上面包车型客车代码彰显了如何向数据库表插入数据: 

 string insertString = @"insert into Categories(CategoryName, Description)values ('Miscellaneous', 'Whatever doesn''t fit elsewhere')";

 SqlCommand cmd = new SqlCommand(insertString, conn);

 cmd.ExecuteNonQuery();

SqlCommand的实例化进程与以前见到的有点组别,可是基本后生可畏致。在构造函数的第五个字符串参数中是用的是插入字符串变量而不三字符串字面值。该变量在SqlCommand表明在此以前被声称了。

瞩目在insertString文本中“doesn’’t”的四个单引号(’’)。这是将它转义为适当的单引号。

此外一个亟需注意的是我们显式指明了列:CategoryName和Description。列表中有三个主键名字为CategoryID。我们忽略那列因为SQL Server将活动加多此字段。试图对主键比如CategoryID加多值会时有发生特别。

为了试行此命令,我们大约的对SqlCommand实体cmd调用ExecuteNonQuery方法。

这段代码是表1中InsertData方法的一片段,大家将要末端集中介绍。

立异数据

ExecuteNonQuery方法同样用来更新数据。上面包车型地铁代码展现了怎样立异数据:

 string updateString = @"update Categories set CategoryName = 'Other'

     where CategoryName = 'Miscellaneous'";

 SqlCommand cmd = new SqlCommand(updateString);

 cmd.Connection = conn;

 cmd.ExecuteNonQuery();

删去数据

你同样能够使用ExecuteNonQuery方法删除数据。上面包车型客车事例表达了如何使用EXecuteNonQuery方法删除数据库中的记录。 

 string deleteString = @"delete from Categories where CategoryName = 'Other'";

 SqlCommand cmd = new SqlCommand();

 cmd.CommandText = deleteString;

 cmd.Connection = conn;

 cmd.ExecuteNonQuery();

其生机勃勃示例使用了从未有过参数的SqlCommand布局函数。代替他的是显式地安装了CommandText和SqlCommand对象的接连属性。

我们相符能够利用SqlCommand构造函数在前边的五个重载方式——用来插入大概更新命令——获得雷同的结果。它表达了在任什么日期候不仅能改变命令文本又能够转移连接对象。

ExecuteNonQuery方法调用将指令传递给数据库。

得到单大器晚成值

某个时候你想从数据库中只取三个值,它只怕是有关数据集的计数、和、平均值可能别的聚合数值。使用ExecuteReader方法并总结代码中的结果实际不是做那么些专门的学业的卓有功效措施。最佳的接收正是让数据库能够实施何况只回去您所供给的独门的值。上面包车型客车亲自过问表达了何等使用ExecuteScalar方法来兑现:

 SqlCommand cmd = new SqlCommand("select count(*) from Categories", conn);

  int count = (int)cmd.ExecuteScalar(); 

总结

SqlCommand对象允许你擦许并对数据库传送命令。它满含指向不一致的授命而特定的办法。Execute里德r方法重回SqlData里德r对象来具体查询的结果。对于insert,update以致delete这么些SQL命令,使用ExecuteNonQuery方法。如若您只必要查询的单身聚焦值,ExecuteScalar方法是最棒的抉择

string sql="";---你自身定义.
 DBHelper.connString数据库连接字符串 你和睦定义
SqlConnection conn = new SqlConnection(DBHelper.connString);
 SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteScalar(State of Qatar---实行查询,重回第生机勃勃行第一列的值
cmd.ExecuteNonQuery(卡塔尔(قطر‎;--实施增,删,改 再次来到影响行数
 SqlDataReader sdr = cmd.ExecuteReader(卡塔尔(قطر‎;--查询,很明朗可以见见 重临的是 SqlDataReader对象 ,然后在动用SqlDataReader的 sdr.Read(卡塔尔方法读出多少

转载自:

利用ADO.NET查询和做客数据库步骤

  1.第一个WinForm程序

string sql = @"insert into...";
conn.Open();
using (SqlCommand cmd = new SqlCommand(sql + ";select CAST(scope_identity() AS int);", conn))
{
    id = (int)cmd.ExecuteScalar();
}
conn.Close();

运用ADO.NET查询和做客数据库

(1卡塔尔国 WinForm: Windows Form,  .NET中用来支付Windows窗口应用程序的技巧。

连锁阅读

三番若干次数据库操作:

(2卡塔尔(قطر‎控件:窗口上大多因素都是类似的,因而将这个要素抽象成一些类,这么些类就叫做控件。按键(ButtonState of Qatar,文本框(TextBox卡塔尔(قطر‎,标签(LabelState of Qatar,单选按键(RadioButton卡塔尔国,复选框(CheckBox卡塔尔(قطر‎。

  • C# string 中的 @
  • 多少个 SqlCommand 应用示范
  • SqlCommand 对象-ExecuteScalar(卡塔尔(قطر‎方法的施用
  • 拿到新记录 ID

1.       定义连接字符串:

(3) 复习TryParse

String connString = “Data Source = 服务器名; Initial Catalog = 数据库名;User ID = 顾客名;Pwd = 密码”(未有 密码能够归纳)

int.TryParse:将数字的字符串表示格局转变为它的等同30位有暗号整数,二个提醒操作是不是中标的再次回到值。

String connString = @"Data Source = .; Initial Catalog = 数据库名 ; Integrated Security = True ";

语法结构:public static bool Tryparse(string s,out int resultState of Qatar;

2.       创建Connection对象:

注:TryParse方法近似与parse方法,差别之处在于TryParse方法在更动退步事不抓住这么些。

SqlConnection conn = new SqlConnection(connString);

诸如:加法总计器:

3.       张开与数据库的总是:

string str1=TextBox1.Text;     string str2=TextBox2.text;

conn.Open();

int i1,i2;

Command对象(允许向数据库传递央浼,检索和操作数据库中的数据卡塔尔使用手续:

if(!int.TryParse(str1,out i1))

1.       创造数据库连接

{

SqlConnection conn = new SqlConnection(connString);

MessageBox.Show(“第贰个数不是法定的平头!”卡塔尔;

2.       定义SQL语句

Return;
}

String sql = “”;

              If(!int.TryParse(str2,out i2))

3.       创建Command语句

              {

SqlCommand cmd = new SqlCommand(sql,conn);

                     MessageBox.Show(“第二个数不是合法的大背头!”卡塔尔国;

4.       实行命令(实践命令从前,必得展开数据库)

                     Return;

int num = (int)cmd.ExecuteScalar();

              }

 

              int i3=i1+i2;   TextBox3.Text=Convert.ToString(i3);

 

(4卡塔尔国 文本框的两种形式:Multiline(多行),PassWordChar(密码)

行使ADO.NET查询和操作数据库

(5卡塔尔国控件名要有含义,控件名前缀的“潜准则”,按键Button:btn;文本框TextBox:txt;

DataReader逐行读取数据:

复选框CheckBox:cb。控件的名字要有意义!

DataReader重要成员:

(6卡塔尔局地变量每便运维完结变量的值都会被销毁,下一次在运作,会重新开头化,而类字段只假诺一个目的,那么只要对象不销毁,就能直接维持对象的字段值。

属性

说明

HasRows

是否返回了结果

方法

说明

 Read

前进到下一行记录

Close

关闭 DataReader 对象

举例:文本框达成查询出某一个人的实际绩效是内部最高的?

DataReader使用手续:

ADO.NET基础

1.       创建Command对象:

  1. ADO.NET基础

2.       调用Command对象的ExecuteReader(卡塔尔国方法创立DataReader对象(若是已经有一个Command对象名称叫comm,就能够那样创造一个DataReader对象:SqlDataReader sda = conn.ExecuteReader();卡塔尔

(1卡塔尔程序要和数据库实行互相要透过ADO.NET举行,通过ADO.NET就能够在前后相继中施行SQL语句,ADO.NET提供了对各类不一致年数据库的相会操作接口。

3.       使用DataReader的Reader(卡塔尔国方法逐行读取数据(这么些方式再次回到二个布尔值,假如能读到风度翩翩行记录,就回来True,不然重返FalseState of Qatar:sda.Reader(State of Qatar;

(2卡塔尔国 在Winform中用到的风姿洒脱段代码(杨中国科高校先生誉为美妙的代码卡塔尔国。嘿嘿

4.       读取当前进的某列的数码,能够像使用数组相符,用方括号来读取某列的值,如:(type State of Qatarsda[],方括号中得以像数组同样使用列的目录,从0开端,也得以利用列名。读取的列值要扩充类型转变,如:(stringState of Qatarsda[“StudentName”];

    string dataDir=AppDomain.CurrentDomain.BaseDirectory;

5.       关闭DataReader对象,调用它的Close(卡塔尔国方法,如:sda.Close(卡塔尔国;

    if(dataDir.Endswith(@”binDebug”)||dataDir.EndsWith(@”binRelease”))

例:从数据库中读取国籍放入国籍下拉列表框中(查询数据库中的数据State of Qatar:

    {

//定义sql语句

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

            string sql = "select nationality from nationlityInfo";

           AppDomain.CurrentDomain.SetData(“DataDirectory”,dataDir);

                     //创建Command对象

    }

            SqlCommand command = new SqlCommand(sql, DBHelper.connection);

原理剖析:连接字符串中的DataDirectory的值正是经过AppDomain.CurrentDomain.SetData赋值过去的,若是当前前后相继的目录以”binDebug”或者”binRelease”,则以为它是运维在Visual Studio情形中的,就取项指标目录然后赋值给DataDirectory的这一个Key。

            try

  1. 连接SQL Server

            {

(1)连接字符串:程序通过连接字符串钦命要三番两次到那台服务器上的,那么些实例的非常数据库,用哪些顾客名和密码。

                //展开数据库连接

(2卡塔尔 项目内嵌mdf文件格局的链接字符串为:

                DBHelper.connection.Open();

“DataSource=.SqlExpress;AttachDBFilename=|DataDirectory|Database.mdf|; Integrated.Security=True;User InStance=True”。

                SqlDataReader reader = command.ExecuteReader();

注解:.SqlExpress表示”本机上的SQLExpress实例”若是数据库实例名不是SQLExpress,则要求改革。

                //循环读出国籍放入国籍组合框

(3卡塔尔国 ADO.NET中经过SqlConnection类成立到SQL Server的连接,SqlConnection代表叁个数据库连接,ADO.NET中的连接等能源都落到实处了IDisposable接口,能够运用using实行能源管理。
(4卡塔尔国 释放能源的三种方法:

                while (reader.Read())

(1)  using( )                           (2)  try

                {

    {                                      {     }

                    cboNat.Items.Add(reader["nationality"].ToString());

                                                                          catch

                }

    }                                                                    {

                reader.Close();

                                                                                 conn.Close();

            }

                                                                                 conn.Dispose();

            catch (Exception ex)

}

            { //打字与印刷卓殊

  1. 试行简单的Insert语句

                Console.WriteLine(ex.Message);

(1卡塔尔(قطر‎ SqlCommand表示向服务器交由四个指令(SQL语句等)。

            }

CommandText属性为要实行的SQL语句,ExecuteNonQuery方法实践三个非查询语句(Update,Insert,Delete)等。

            finally

using(SqlCommand cmd=conn.CreateCommand())

            {//关闭数据库

{

                DBHelper.connection.Close();

cmd.CommandText=”Insert into myTable1(name) values(‘abc’)”;

            }

cmd.ExecuteNonQuery();
}

对数据库中的数据增删改(使用Command对象的ExecuteNonQuery(卡塔尔国方法卡塔尔

(2卡塔尔国 ExecuteNonQuery重临值是实践受影响的行数。

ExecuteNonQuery(卡塔尔方法用于实施钦赐的SQL语句,如:update、insert、delete,它回到的是受SQL语句影响的行数

  1. 实践查询

利用Command对象的ExecuteNonQuery(卡塔尔(قطر‎方法的手续如下:

(1卡塔尔国 实施有多行结果集的用ExecuteReader。

1.  创建Connection对象

SqlDataReader reader=cmd.ExecuteReader();

2.  概念要试行的SQL语句

   While(reader.Read())

3.  创建Command对象

   {

4.  执行ExecuteNonQuery()方法

               Console.WriteLine(reader.GetString());

5.  基于再次来到结果,进行三回九转管理

}

       (2卡塔尔(قطر‎reader的GetString,GetInt32等措施只可以经受整数参数,约等于序号,用GetOrdinal(卡塔尔方法根据列名动态拿到序号。

(3) close和Dispose的区别:

  1State of Qatar close关闭之后仍然为能够开荒。

  2卡塔尔 Dispose:直接销毁,不能够重新行使。

  3卡塔尔(قطر‎using在出了功效域以往调用Dispose,SqlConnection,FileStream等的Dispose内部都会做这么的剖断,判别有未有close,如果未有close就先close在出狱财富Dispose。

  1. ExecuteScalar

(1State of QatarSqlCommand的ExecuteScalar方法用于实践查询,并回到查询所再次回到的结果集中的率先行第一列,因为无法鲜明再次来到值的档案的次序,所以再次来到值是object类型。

  cmd.CommandText=”Select count(*) from T_Users”;

 int i=Convert.ToInt32(cmd.ExecuteScalar());

(2卡塔尔(قطر‎ 获得自动增加字段的值,在values关键字前边加上output inserted.ID,当中id为主键字段名,实行结果正是输入的的主键值,用ExecuteScalar实践最低价。

   cmd.CommandText=”Insert into T_Users(username,password) output inserted.ID values(‘admin’,’888888’)”;

   int i=Convert.ToInt32(cmd.ExecuteScalar());

  1. SQL注入漏洞攻击

(1卡塔尔(قطر‎ 登入决断:select * from T_Users where username=….  and Password=…..;将参数拼接到SQL语句中。

(2卡塔尔国 构造恶意的password=’or’1’=’1

(3卡塔尔 防守注入漏洞攻击的办法:不采纳SQL语句拼接,通过参数赋值。

  1. 查询参数

(1卡塔尔SQl语句使用@UserName表示”此处用参数代替”,向SqlCommand的Parameters中丰裕参数。

cmd.CommandText=”Select * from T_User where username=@username and Password=@pwd”;

cmd.Parameters.Add(new SqlParameters(“username”,”admin”));

cmd.Parameters.Add(new SqlParameters(”password”,”888888”));

(2State of Qatar 参数在SQL Server内部不是简轻松单的字符串替换,SQL Server直接用丰富的值进行数量相比较,由此不会有注入漏洞攻击。

本文由10bet手机官网发布于web前端,转载请注明出处:NET查询和访问数据库,Winform基础程序和ADO

上一篇:中样式表只有前半部分起作用的原因,关于编码问题【10bet手机官网】 下一篇:没有了
猜你喜欢
热门排行
精彩图文