当前位置:Gxlcms > 数据库问题 > Winform开发之SqlCommand常用属性和方法

Winform开发之SqlCommand常用属性和方法

时间:2021-07-01 10:21:17 帮助过:6人阅读

void Main(string[] args) { string str = "server=.;database=JunTest;uid=sa;pwd=123"; SqlConnection conn = new SqlConnection(str); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "Update Person Set Name = ‘Ado.net修改‘ WHERE Id = @Id"; //设置操作语句 //看看默认的发生错误等待时间(秒) Console.WriteLine(cmd.CommandTimeout); //30 //指明CommandText是SQL语句,存储过程还是表操作。枚举类型,转到定义可看 Console.WriteLine(cmd.CommandType); //输出 Text 表示这是一条SQL语句 cmd.CommandText=CommandType.StoredProcedure/CommandType.Text //SqlCommand的SqlConnection实例对象 Console.WriteLine(cmd.Connection.ConnectionString); //"server=.;database=JunTest;uid=sa;pwd=123"; //设置参数值 cmd.Parameters.Add("@Id", SqlDbType.Int); cmd.Parameters["@Id"].Value = 1; Console.WriteLine(cmd.Parameters["@Id"].Value); //输出1 conn.Open(); conn.Close(); Console.ReadKey(); }

二、方法

1、SqlCommand.ExecuteNonQuery 方法

对数据库的增删改都用这个操作,只是里面调用的sql语句和存储过程不同

static void Main(string[] args)
        {
            string str = "server=.;database=JunTest;uid=sa;pwd=123;";
            SqlConnection conn = new SqlConnection(str);        //创建连接
            SqlCommand cmd = conn.CreateCommand();              //创建命令
            cmd.CommandText = "Update Person Set PersonName = ‘Ado.net修改‘ WHERE PersonId = @Id";    //设置操作语句
            cmd.Parameters.Add("@Id", SqlDbType.Int);           //添加参数,说明类型
            cmd.Parameters["@Id"].Value = 1;                    //设置参数值
            conn.Open();                                        //打开连接
            int i = cmd.ExecuteNonQuery();                      //执行命令,ExecuteNonQuery由名称看出,只能用于非查询语句
            conn.Close();                                       //关闭连接
            Console.WriteLine(i);                               //输出影响行数
            
            Console.ReadKey();
        }

2、ExecuteScalar()

创建一个 SqlCommand,然后使用 ExecuteScalar 执行它。 向该示例传递两个字符串,一个字符串表示要插入到表中的新值,另一个字符串用于连接至数据源。 如果已插入新行,则此函数会返回新的“Identity”列值,如果失败,则返回 0。

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;
}

3、ExecuteReader() 

static void Main(string[] args)
        {
            string str = "server=.;database=JunTest;uid=sa;pwd=123;";
            SqlConnection conn = new SqlConnection(str);        //创建连接
            SqlCommand cmd = conn.CreateCommand();              //创建命令
            cmd.CommandText = "SELECT * FROM Person";           //设置操作语句
            conn.Open();                                        //打开连接
            //SqlDataReader读取数据
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    Console.WriteLine(reader[0] + ":" + reader[1]);     //输出当前行的第一列,第二列数据
                }
            }

            cmd.CommandText = "SELECT Count(*) FROM Person";
            object obj = cmd.ExecuteScalar();                   //仅查询第一行第一列
            Console.WriteLine((int)obj);
            conn.Close();                                       //关闭连接
            
            Console.ReadKey();
        }

 4、ExecuteXmlReader()  返回System.XmlReader实例,用于读取SQLServer中的XML字段的值

技术分享数据库字段存的就是xml

<Article>
  <author age="30">张三</author>
  <length>12000</length>
  <price>42</price>
</Article>
static void Main(string[] args)
        {
            string str = "server=.;database=JunTest;uid=sa;pwd=123;";
            SqlConnection conn = new SqlConnection(str);        //创建连接
            SqlCommand cmd = conn.CreateCommand();              //创建命令
            cmd.CommandText = "SELECT * FROM Person";           //设置操作语句
            conn.Open();                                        //打开连接

            cmd.CommandText = "SELECT Top 1 ArticleInfo FROM Article";  //查询XML字段
            using (XmlReader reader = cmd.ExecuteXmlReader())           //由Command实例返回XmlReader的实例
            {
                while (reader.Read())
                {
                    if (reader.Name == "author")
                    {
                        Console.WriteLine(reader.ReadInnerXml());       //输出张三
                    }
                }
            }
            conn.Close();       

            Console.ReadKey();
        }

还有就是以上这些方法的异步版本,本处仅以以下两个方法示例:

  5、BeginExecuteNonQuery() 异步版ExecuteNonQuery()

  6、EndExecuteNonQuery()  异步版ExecuteNonQuery()

class Program
    {
        static void Main(string[] args)
        {
            string str = "server=.;database=JunTest;uid=sa;pwd=123;Asynchronous Processing=true";
            SqlConnection conn = new SqlConnection(str);            //创建连接
            SqlCommand cmd = conn.CreateCommand();                  //创建命令
            cmd.CommandText = "INSERT INTO Person VALUES(11,‘郭嘉‘)";    //设置操作语句
            conn.Open();                                            //打开连接
            cmd.BeginExecuteNonQuery(BeginCallback, cmd);           //异步执行语句
            Console.WriteLine("不管你执没执行完,我继续做我的事!");

            Console.ReadKey();
        }

        public static void BeginCallback(IAsyncResult result)
        {
            Console.WriteLine("正在执行SQL命令!");
            SqlCommand cmd = result.AsyncState as SqlCommand;   //获得异步传入的参数
            Console.WriteLine("成功执行命令:" + cmd.CommandText);
            Console.WriteLine("本次执行影响行数为:"  + cmd.EndExecuteNonQuery(result));
            Console.WriteLine("关闭连接!");
            cmd.Connection.Close();     //正式关闭连接
        }
    }

本文一部分来自msdn,一部分来自逆心的博客

Winform开发之SqlCommand常用属性和方法

标签:

人气教程排行