加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2023-01-30 15:01:20 所属栏目:MsSql教程 来源:转载
导读: SqlCommand类表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程,有若干个属性和若干个方法,具体的各类方法使用可以从msdn上找到。
这里介绍几个常用东东
一、属性
Comm

SqlCommand类表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程,有若干个属性和若干个方法,具体的各类方法使用可以从msdn上找到。

这里介绍几个常用东东

一、属性

CommandText 获取或设置要对数据源执行的 Transact-SQL 语句、表名或存储过程。

CommandTimeout 获取或设置在终止执行命令的尝试并生成错误之前的等待时间。

CommandType 获取或设置一个值Mssql基本语句,该值指示释 CommandText 是SQL语句,存储过程还是表操作。

Connection 获取或设置 SqlCommand 的此实例使用的 SqlConnection。

Parameters 获取 SqlParameterCollection。

Transaction 获取或设置将在其中执行 SqlCommand 的 SqlTransaction。

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 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字段的值

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(); //正式关闭连接

}

}

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!