.net使用中sqlcommand的用法

5 篇文章 0 订阅
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 数据提供程序不支持在向通过 TextCommandType 调用的 SQL 语句或存储过程传递参数时使用问号 (?) 占位符。在这种情况下,必须使用命名的参数。例如:

SELECT * FROM Customers WHERE CustomerID = @CustomerID

 

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

public void CreateSqlCommand()
{
          SqlCommand command = new SqlCommand();
          command.CommandTimeout = 15;
          command.CommandType = CommandType.Text;
}

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

 

 

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

SqlCommand comm =new SqlCommand("select * from CGSZ where cid="+id,conn);  
SqlDataReader reder=comm.ExecuteReader(); 
while(reder.Read()) 
{  
          //读出内容列
          string str=reder["cname"].ToString(); 
         //读取分类列
         string str1=reder["ckind"].ToString(); 
          //分别为文本框加载数据
         this.txtContent.Text = str;  
         this.txtClass.Text = str1;   
}
        /// <summary>
        /// 对连接执行 Transact-SQL 语句返回一个SqlDataReader,查询是否存在记录(注意要关闭)。
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static SqlDataReader GetReader(string sql)
        {
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                SqlCommand cmd = new SqlCommand(sql,con);
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                return reader;
            }
        }

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

 

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

/// <summary>
/// Update(// || p.Value.ToString().Trim() == "System.Byte[]")) by richmen 2011 05
/// 注释掉才可以实现相片的修改跟保存功能
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
/// </summary>
/// <param name="sql">sql语句或者存储过程的名称</param>
/// <param name="parameters">null的时候为sql</param>
/// <returns></returns>
public static object ExecuteScalar(string sql, SqlParameter[] parameters)
{
    if (parameters != null)
    {
        foreach (SqlParameter p in parameters)
        {
            if (p.Value == null)// || p.Value.ToString().Trim() == "System.Byte[]")
                p.Value = DBNull.Value;
        }
    }
    using (SqlConnection con = new SqlConnection(ConnectionString))
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        if (parameters != null)
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddRange(parameters);
        }
        else
        {
            cmd.CommandType = CommandType.Text;
        }
        cmd.CommandText = sql;
        try
        {
            con.Open();
            return cmd.ExecuteScalar();
        }
        catch
        {
            return string.Empty;
        }
    }
}
}

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

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

private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            if (trans != null)
            {
                cmd.Transaction = trans;
            }
            cmd.CommandType = CommandType.Text;
            if (cmdParms != null)
            {
                for (int i = 0; i < cmdParms.Length; i++)
                {
                    SqlParameter sqlParameter = cmdParms[i];
                    if ((sqlParameter.Direction == ParameterDirection.InputOutput || sqlParameter.Direction == ParameterDirection.Input) && sqlParameter.Value == null)
                    {
                        sqlParameter.Value = DBNull.Value;
                    }
                    cmd.Parameters.Add(sqlParameter);
                }
            }
        }
private static void UpdateDemographics(Int32 customerID,string demoXml, string connectionString)
{
    // Update the demographics for a store, which is stored 
    // in an xml column. 
    string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
        + "WHERE CustomerID = @ID;";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(commandText, connection);
        command.Parameters.Add("@ID", SqlDbType.Int);
        command.Parameters["@ID"].Value = customerID;

        // Use AddWithValue to assign Demographics.
        // SQL Server will implicitly convert strings into XML.
        command.Parameters.AddWithValue("@demographics", demoXml);

        try
        {
            connection.Open();
            Int32 rowsAffected = command.ExecuteNonQuery();
            Console.WriteLine("RowsAffected: {0}", rowsAffected);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}


  • 13
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值