C#之中SqlCommand以及相关函数的使用

来源:互联网 发布:软件工程项目明细 编辑:程序博客网 时间:2024/06/05 13:36

SqlCommand()方法


SqlCommand cmd = new SqlCommand("insert into mynews value ('插入一条新数据')", con);   
 Command对象的构造函数的参数有两个,一个是需要执行的SQL语句,另一个是数据库连接对象。创建Command对象后,就可以执行SQL命令,执行后完成并关闭数据连接,示例代码如下所示。
cmd.ExecuteNonQuery(); //执行SQL命令
con.Close(); //关闭连接
 
SqlCommand类的属性
 
1.CommandText  
 获取或设置要对数据源执行的Transact—SQL语句或存储过程的名称。
  
2. CommandType  
获取或设置一个值,该值指示如何解释CommandText属性。

当将 CommandType 属性设置为 StoredProcedure 时,应将 CommandText 属性设置为存储过程的名称。当调用 Execute 方法之一时,该命令将执行此存储过程。

用于 SQL Server 的 Microsoft .NET Framework 数据提供程序不支持在向通过 Text 的 CommandType 调用的 SQL 语句或存储过程传递参数时使用问号 (?) 占位符。在这种情况下,必须使用命名的参数。例如:

SELECT * FROM Customers WHERE CustomerID = @CustomerID

 

下面的示例创建一个SqlCommand并设置它的一些属性。

[csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public void CreateSqlCommand()  
  2. {  
  3.           SqlCommand command = new SqlCommand();  
  4.           command.CommandTimeout = 15;  
  5.           command.CommandType = CommandType.Text;  
  6. }  

  
3.Connection  
获取或设置SqlCommand的实例使用的SqlConnection。
  
4.CommandTimeOut   
获取或设置在终止执行命令的尝试并生成错误之前的等待时间。

 

 

SqlCommand类的方法
 
1.ExecuteNonQuery();  
 它的返回值类型为int型。多用于执行增加,删除,修改数据。返回受影响的行数。当select操作时,返回-1。
  
2.ExecuteReader();  
  它的返回类型为SqlDataReader。此方法用于用户进行的查询操作。使用SqlDataReader对象的Read();方法进行逐行读取。
例如:

[csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. SqlCommand comm =new SqlCommand("select * from CGSZ where cid="+id,conn);    
  2. SqlDataReader reder=comm.ExecuteReader();   
  3. while(reder.Read())   
  4. {    
  5.           //读出内容列  
  6.           string str=reder["cname"].ToString();   
  7.          //读取分类列  
  8.          string str1=reder["ckind"].ToString();   
  9.           //分别为文本框加载数据  
  10.          this.txtContent.Text = str;    
  11.          this.txtClass.Text = str1;     
  12. }  
[csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. /// <summary>  
  2. /// 对连接执行 Transact-SQL 语句返回一个SqlDataReader,查询是否存在记录(注意要关闭)。  
  3. /// </summary>  
  4. /// <param name="sql"></param>  
  5. /// <returns></returns>  
  6. public static SqlDataReader GetReader(string sql)  
  7. {  
  8.     using (SqlConnection con = new SqlConnection(ConnectionString))  
  9.     {  
  10.         SqlCommand cmd = new SqlCommand(sql,con);  
  11.         con.Open();  
  12.         SqlDataReader reader = cmd.ExecuteReader();  
  13.         return reader;  
  14.     }  
  15. }  

其中的读取数据列的时候。除了使用reder["列名"].ToString();还可以使用reder[索引].ToSting();<注意:这里的索引指的是数据库中列的索引。从0开始。> 

 

3.ExecuteScaler();  
 它的返回值类型多位int类型。它返回的多为执行select查询。得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。

[csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. /// <summary>  
  2. /// Update(// || p.Value.ToString().Trim() == "System.Byte[]")) by richmen 2011 05  
  3. /// 注释掉才可以实现相片的修改跟保存功能  
  4. /// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。  
  5. /// </summary>  
  6. /// <param name="sql">sql语句或者存储过程的名称</param>  
  7. /// <param name="parameters">null的时候为sql</param>  
  8. /// <returns></returns>  
  9. public static object ExecuteScalar(string sql, SqlParameter[] parameters)  
  10. {  
  11.     if (parameters != null)  
  12.     {  
  13.         foreach (SqlParameter p in parameters)  
  14.         {  
  15.             if (p.Value == null)// || p.Value.ToString().Trim() == "System.Byte[]")  
  16.                 p.Value = DBNull.Value;  
  17.         }  
  18.     }  
  19.     using (SqlConnection con = new SqlConnection(ConnectionString))  
  20.     {  
  21.         SqlCommand cmd = new SqlCommand();  
  22.         cmd.Connection = con;  
  23.         if (parameters != null)  
  24.         {  
  25.             cmd.CommandType = CommandType.StoredProcedure;  
  26.             cmd.Parameters.AddRange(parameters);  
  27.         }  
  28.         else  
  29.         {  
  30.             cmd.CommandType = CommandType.Text;  
  31.         }  
  32.         cmd.CommandText = sql;  
  33.         try  
  34.         {  
  35.             con.Open();  
  36.             return cmd.ExecuteScalar();  
  37.         }  
  38.         catch  
  39.         {  
  40.             return string.Empty;  
  41.         }  
  42.     }  
  43. }  
  44. }  

4.其它;  
当参数中含有问号 (?) 等占位符时,必须使用命名的参数。 

下面的示例演示如何创建 SqlCommand 和向 SqlParameterCollection 中添加参数。例如:

[csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)  
  2.         {  
  3.             if (conn.State != ConnectionState.Open)  
  4.             {  
  5.                 conn.Open();  
  6.             }  
  7.             cmd.Connection = conn;  
  8.             cmd.CommandText = cmdText;  
  9.             if (trans != null)  
  10.             {  
  11.                 cmd.Transaction = trans;  
  12.             }  
  13.             cmd.CommandType = CommandType.Text;  
  14.             if (cmdParms != null)  
  15.             {  
  16.                 for (int i = 0; i < cmdParms.Length; i++)  
  17.                 {  
  18.                     SqlParameter sqlParameter = cmdParms[i];  
  19.                     if ((sqlParameter.Direction == ParameterDirection.InputOutput || sqlParameter.Direction == ParameterDirection.Input) && sqlParameter.Value == null)  
  20.                     {  
  21.                         sqlParameter.Value = DBNull.Value;  
  22.                     }  
  23.                     cmd.Parameters.Add(sqlParameter);  
  24.                 }  
  25.             }  
  26.         }  
[csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. private static void UpdateDemographics(Int32 customerID,string demoXml, string connectionString)  
  2. {  
  3.     // Update the demographics for a store, which is stored   
  4.     // in an xml column.   
  5.     string commandText = "UPDATE Sales.Store SET Demographics = @demographics "  
  6.         + "WHERE CustomerID = @ID;";  
  7.   
  8.     using (SqlConnection connection = new SqlConnection(connectionString))  
  9.     {  
  10.         SqlCommand command = new SqlCommand(commandText, connection);  
  11.         command.Parameters.Add("@ID", SqlDbType.Int);  
  12.         command.Parameters["@ID"].Value = customerID;  
  13.   
  14.         // Use AddWithValue to assign Demographics.  
  15.         // SQL Server will implicitly convert strings into XML.  
  16.         command.Parameters.AddWithValue("@demographics", demoXml);  
  17.   
  18.         try  
  19.         {  
  20.             connection.Open();  
  21.             Int32 rowsAffected = command.ExecuteNonQuery();  
  22.             Console.WriteLine("RowsAffected: {0}", rowsAffected);  
  23.         }  
  24.         catch (Exception ex)  
  25.         {  
  26.             Console.WriteLine(ex.Message);  
  27.         }  
  28.     }  
  29. }  


使用sqlcommand对象来返回数据集合的方法
string strconn="data source=billgates;initial catalog=test;integrated security=SSPI;";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand sqlcmd=new SqlCommand();
sqlcmd.CommandText ="select * from student";
sqlcmd.Connection=conn;
SqlDataAdapter adp=new SqlDataAdapter(sqlcmd);
DataTable dt=new DataTable();
adp.Fill(dt);
dataGrid1.DataSource=dt;

使用sqlcommand对象来返回SQL执行正确与否
string strconn="data source=billgates;initial catalog=test;integrated security=SSPI;";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand sqlcmd=new SqlCommand();
sqlcmd.CommandText ="select * from student";
sqlcmd.Connection=conn;
try
{
  sqlcmd.ExecuteNonQuery();
  MessageBox.Show("success");
}
catch
{
  MessageBox.Show("false");
}

使用sqlcommand对象来操作存储过程
string strconn="data source=billgates;initial catalog=test;integrated security=SSPI;";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand sqlcmd=new SqlCommand();
sqlcmd.CommandText ="a";
sqlcmd.CommandType=CommandType.StoredProcedure ;
sqlcmd.Connection=conn;
sqlcmd.Parameters.Add("@param1",textBox1.Text.Trim());
sqlcmd.Parameters.Add("@param2",textBox2.Text.Trim());
sqlcmd.Parameters.Add("@param3",textBox3.Text.Trim());

SqlDataAdapter adp=new SqlDataAdapter(sqlcmd);
DataTable dt=new DataTable();
adp.Fill(dt);
dataGrid1.DataSource=dt;

 

ExecuteReader方法

using System;
using System.Data.SqlClient;
public class Lvcha
{
  public static void Main(string[] args)
  {
    string source="Server =192.168.1.100; User ID=ac_sy_guest; Password=guest1314; Initial CataLog=Account";
    string select="select * from dbUser";
    SqlConnection conn=new SqlConnection(source);
    conn.Open();
    SqlCommand cmd=new SqlCommand(select,conn);
    SqlDataReader reader=cmd.ExecuteReader();//返回只能读取,不能写入的SqlDataReader对象
    while(reader.Read())
    {
      Console.WriteLine("{0}",reader["user_name"]);
    }
    Console.ReadLine();
  }
}


ExecuteNonQuery方法

一般修改删除都插入都用它
返回受影响的行数。

using System;
using System.Data.SqlClient;
public class Lvcha
{
  public static void Main(string[] args)
  {
    string source="Server =192.168.1.100; User ID=ac_sy_guest; Password=guest1314; Initial CataLog=Account";
    string select="updata .....";
    SqlConnection conn=new SqlConnection(source);
    conn.Open();
    SqlCommand cmd=new SqlCommand(select,conn);
    object o=cmd.ExecuteNonQuery();
   
    while(reader.Read())
    {
      Console.WriteLine("{0}",reader["user_name"]);
    }
    Console.ReadLine();
  }
}


ExecuteScalar方法

执行查询,并返回查询所返回的结果集中第一行的第一列。所有其他的列和行将被忽略。

using System;
using System.Data.SqlClient;
public class Lvcha
{
  public static void Main(string[] args)
  {
    string source="Server =192.168.1.100; User ID=ac_sy_guest; Password=guest1314; Initial CataLog=Account";
    string select="select count(*) from dbUser";
    SqlConnection conn=new SqlConnection(source);
    conn.Open();
    SqlCommand cmd=new SqlCommand(select,conn);
    object o=cmd.ExecuteScalar();
    Console.WriteLine(o);
    Console.ReadLine();
  }
}

 

ExecuteNonQuery用于执行不返回任何记录的SQL语句或存储过程。在数据库执行如更新、插入、删除操作时,应使用这个方法。ExecuteNonQuery返回一个整数值,用来说明受查询语句影响的行数。
connection.Open();
command.ExecuteNonQuery();
command.Close();   

ExecuteScalar与ExecuteNonQuery一样,其返回的也是单值,但该返回值是从数据库中读出来的,而不是受影响的行数。它通常用于选择一个值的SQL语句。如果SELECT返回多行或多列,则使用该方法仅返回第一行第一列的数据。

ExecuteReader被用于返回多条记录的SELECT语句(包含任意个字段)。ExecuteReader将返回一个包含查询结果的 SqlDataReader对象。一个SqlDataReader对象是以顺序向前且只读的形式逐个读取并返回结果的。SqlDataReader是数据 库中读取数据最快的对象,但必须打开连接。通过SqlDataReader取回所有的记录,并把它们存入DataTable对象中(它可以存储离线数据而 不需要一个打开的连接),这样就可以马上关闭数据库连接了。DataTable类可以存放本地的结果集而不需要一个打开的SQL Server连接,和其它的ADO.NET对象一样,它也不是特定于某种数据提供程序的。

conn.Open();
SqlDataReader reader = comm.ExecuteReader();
DataTable table = new DataTable();
table.Load(reader);
reader.Close();
conn.Close();

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 在淘宝上卖号被骗了怎么办 如果淘宝商家保证金不够退款怎么办 天猫账号忘记了怎么办 姨妈来了10天了怎么办 微店商品无资质被下架怎么办 微店商品无资质怎么办 淘宝买东西提前确认收货了怎么办 苹果手机王者荣耀充值充多了怎么办 买家淘宝账号出现虚拟交易怎么办 贵州通登录不上怎么办 华为手机媒体声音小怎么办 苹果七内存满了怎么办 华为p9玩王者卡怎么办 鞋放健身房丢了怎么办 京东商家搞虚假活动怎么办 淘宝买的商品出现质量问题怎么办 买了重复的东西怎么办 借记卡在atm用不了怎么办 淘宝评论视频审核不通过怎么办 京东票据丢了怎么办 开拼多多找不到低价货源怎么办 要是校花追你该怎么办 苏宁自提逾期怎么办 天猫超市有问题怎么办 买的东西质量有问题怎么办 淘宝优惠额度大做不了怎么办 淘宝天猫拒绝退货退款怎么办 u盘变成活动分区怎么办 学生上课纪律差家长老师怎么办 老师管纪律学生打老师怎么办? 淘宝店铺层级排名下降怎么办 网购不支持该地区销售怎么办 分销公司佣金不给业务员怎么办 淘宝买家账号违规了怎么办 王者荣耀打野被队友抢野怎么办 艾肯材料换错了怎么办 淘宝直播粉丝5万怎么办 淘宝直播刚开始好难怎么办 分期乐账号忘记了怎么办 外链多了影响网站排名怎么办 自粘墙纸有气泡怎么办