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

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 plain copy print ? 在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 plain copy print ? 在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 plain copy print ? 在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 plain copy print ? 在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 plain copy print ? 在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 plain copy print ? 在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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值