当前位置:首页 » 编程语言 » sqlexecute返回值
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlexecute返回值

发布时间: 2022-04-19 03:29:16

‘壹’ 如何接收sql语句执行.的返回值

获取存储过程返回值及代码中获取返回值
1.OUPUT参数返回值
例: 向Order表插入一条记录,返回其标识

CREATE PROCEDURE [dbo].[nb_order_insert](
@o_buyerid int ,
@o_id bigint OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN
INSERT INTO [Order](o_buyerid )
VALUES (@o_buyerid )
SET @o_id = @@IDENTITY
END
END
存储过程中获得方法:

DECLARE @o_buyerid int
DECLARE @o_id bigint
EXEC [nb_order_insert] @o_buyerid ,o_id bigint
2.RETURN过程返回值

CREATE PROCEDURE [dbo].[nb_order_insert](
@o_buyerid int ,
@o_id bigint OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
IF(EXISTS(SELECT * FROM [Shop] WHERE [s_id] = @o_shopid))
BEGIN
INSERT INTO [Order](o_buyerid )
VALUES (@o_buyerid )
SET @o_id = @@IDENTITY
RETURN 1 — 插入成功返回1
END
ELSE
RETURN 0 — 插入失败返回0
END
存储过程中的获取方法
DECLARE @o_buyerid int
DECLARE @o_id bigint
DECLARE @result bit
EXEC @result = [nb_order_insert] @o_buyerid ,o_id bigint
3.SELECT 数据集返回值

CREATE PROCEDURE [dbo].[nb_order_select](
@o_id int
)
AS
BEGIN
SET NOCOUNT ON;
SELECT o_id,o_buyerid FROM [Order]
WHERE o_id = @o_id
GO
存储过程中的获取方法
(1)、使用临时表的方法

CREATE TABLE [dbo].[Temp](
[o_id] [bigint] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[o_buyerid] [int] NOT NULL
)
INSERT [Temp] EXEC [nb_order_select] @o_id
– 这时 Temp 就是EXEC执行SELECT 后的结果集
SELECT * FROM [Temp]
DROP [Temp] — 删除临时表
(2)、速度不怎么样.(不推荐)

SELECT * from openrowset(’provider_name','Trusted_Connection=yes’,'exec nb_order_select’)

1.获取Return返回值

程序代码
//存储过程
//Create PROCEDURE MYSQL
// @a int,
// @b int
//AS
// return @a + @b
//GO
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
conn.Open();
SqlCommand MyCommand = new SqlCommand("MYSQL", conn);
MyCommand.CommandType = CommandType.StoredProcere;
MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
MyCommand.Parameters["@a"].Value = 10;
MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
MyCommand.Parameters["@b"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
MyCommand.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
MyCommand.ExecuteNonQuery();
Response.Write(MyCommand.Parameters["@return"].Value.ToString());
2.获取Output输出参数值

程序代码
//存储过程
//Create PROCEDURE MYSQL
// @a int,
// @b int,
// @c int output
//AS
// Set @c = @a + @b
//GO
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
conn.Open();
SqlCommand MyCommand = new SqlCommand("MYSQL", conn);
MyCommand.CommandType = CommandType.StoredProcere;
MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
MyCommand.Parameters["@a"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
MyCommand.Parameters["@b"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@c", SqlDbType.Int));
MyCommand.Parameters["@c"].Direction = ParameterDirection.Output;
MyCommand.ExecuteNonQuery();
Response.Write(MyCommand.Parameters["@c"].Value.ToString());

C#接收存储过程返回值:
public static int User_Add(User us)
{
int iRet;
SqlConnection conn = new SqlConnection(Conn_Str);
SqlCommand cmd = new SqlCommand("User_Add", conn);
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.AddWithValue("@UName", us.UName);
cmd.Parameters.AddWithValue("@UPass", us.UPass);
cmd.Parameters.AddWithValue("@PassQuestion", us.PassQuestion);
cmd.Parameters.AddWithValue("@PassKey", us.PassKey);
cmd.Parameters.AddWithValue("@Email", us.Email);
cmd.Parameters.AddWithValue("@RName", us.RName);
cmd.Parameters.AddWithValue("@Area", us.Area);
cmd.Parameters.AddWithValue("@Address", us.Address);
cmd.Parameters.AddWithValue("@ZipCodes", us.ZipCodes);
cmd.Parameters.AddWithValue("@Phone", us.Phone);
cmd.Parameters.AddWithValue("@QQ", us.QQ);
cmd.Parameters.Add("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue;
try
{
conn.Open();
cmd.ExecuteNonQuery();
iRet = (int)cmd.Parameters["@RETURN_VALUE"].Value;
}
catch (SqlException ex)
{
throw ex;
}
finally
{
conn.Close();
}
return iRet;
}
C#接收存储过程输出参数:
public static decimal Cart_UserAmount(int UID)
{
decimal iRet;
SqlConnection conn = new SqlConnection(Conn_Str);
SqlCommand cmd = new SqlCommand("Cart_UserAmount", conn);
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.AddWithValue("@UID", UID);
cmd.Parameters.Add("@Amount", SqlDbType.Decimal).Direction=ParameterDirection.Output;
try
{
conn.Open();
cmd.ExecuteNonQuery();
iRet = (decimal)cmd.Parameters["@Amount"].Value;
}
catch (SqlException ex)
{
throw ex;
}
finally
{
conn.Close();
}
return iRet;
}

//////////////////////////////////////////////////////////////
SQL 2000用户自定义函数 一。SQL Server 的三种自定义函数
“自定义函数”是我们平常的说法,而“用户定义的函数”是 SQL Server 中书面的说法。
SQL Server 2000 允许用户创建自定义函数,自定义函数可以有返回值。
自定义函数分为:标量值函数或表值函数
•如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数。可以使用多条 Transact-SQL 语句定义标量值函数。
•如果 RETURNS 子句指定 TABLE,则函数为表值函数。
表值函数又可分为:内嵌表值函数(行内函数)或多语句函数
•如果 RETURNS 子句指定的 TABLE 不附带列的列表,则该函数为内嵌表值函数。
•如果 RETURNS 子句指定的 TABLE 类型带有列及其数据类型,则该函数是多语句表值函数。
标量值函数示例
CREATE FUNCTION dbo.Foo()
RETURNS int
AS
BEGIN
declare @n int
select @n=3
return @n
END
create function GetSex(@sex int)
returns varchar(2)-- 用nvarchar(1)
as -- nvarchar:不管是一个字符还是一个汉字,都存为2个字节
begin -- varchar:汉字是2个字节,其他字符存为1个字节
declare @ssex varchar(2)-- 用nvarchar(1)
if(@sex=1)
set @ssex='男'
else
set @ssex='女'
return (@ssex)
end
调用:
select id,username,dbo.GetSex(Sex) as sex ,loginnum from t_user
内嵌表值函数示例
CREATE FUNCTION dbo.Foo()
RETURNS TABLE
AS
return select id, title from msgs
内嵌表值函数只有一个 select 语句。
多语句表值函数示例(部分)
CREATE FUNCTION FindUsers (@userid int )
RETURNS @FindUser TABLE (id int primary key, UserName varchar(30), RegDateTime DateTime,LoginNum int)
as
begin
insert into @FindUser Select ID, UserName,RegDateTime,LoginNum From T_User Where ID=@userid
return
end
调用:
SELECT * FROM FindUsers(6)
注意其 RETURNS 部分。
多语句函数的主体中允许使用以下语句。未在下面的列表中列出的语句不能用在函数主体中。
•赋值语句。
•控制流语句。
•DECLARE 语句,该语句定义函数局部的数据变量和游标。
•SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
•游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。
•INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
•EXECUTE 语句调用扩展存储过程。
二.如何调用自定义函数

调用自定义函数(用户定义的函数)和调用内置函数方式基本相同,
•当调用标量值函数时,必须加上“所有者”,通常是 dbo(但不是绝对,可以在企业管理器中的“用户定义的函数”中查看所有者)。
•当调用表值函数时,可以只使用函数名称。
示例
SELECT *
select dbo.Sta(cnt) from tbl
示例
SELECT *
FROM fn_MyTableFunc( 123.09, N'O''Neill' )
三。存储过程和自定义函数的区别
存储过程(用户定义的存储过程)和自定义函数(用户定义的函数)的区别,在网上已经有讨论过,但有些显得过于零散,有些又篇幅过长不能保证每个人都细心阅读。这里作一个归纳,当然只是应用层面的,可能不全面。
•存储过程,功能强大,可以执行包括修改表等一系列数据库操作,也可以创建为 SQL Server 启动时自动运行的存储过程。
•自定义函数,用户定义函数不能用于执行一组修改全局数据库状态的操作。

•存储过程,可以使用非确定函数。
•自定义函数,不允许在用户定义函数主体中内置非确定函数。

•存储过程,可返回记录集。
•自定义函数,可以返回表变量。

•存储过程,其返回值不能被直接引用。
•自定义函数,其返回值可以被直接引用。

•存储过程,用 EXECUTE 语句执行。
•自定义函数,在查询语句中调用。

‘贰’ ExecuteNonQuery()返回值的几种情况

ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,其方法返回值意义:对于 Update,Insert,Delete语句执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1。

(回滚的意思:删除由一个或多个部分完成的事务执行的更新。为在应用程序、数据库或系统错误后还原数据库的完整性,需要使用回滚。回滚泛指程序更新失败, 返回上一次正确状态的行为)

对于这种更新操作 用我们平时所用的是否大于0的判断操作应该没有问题而且比较好,但是对于其他的操作如对数据库结构的操作,如果操作成功时返回的却是-1,这种情况跟我们平时的思维方式有点差距所以应该好好的注意了。

例如对数据库共添加一个数据表的Create操作,当创建数据表成功时返回-1,如果操作失败的话(如数据表已经存在)往往会发生异常,所以执行这种操作时最好用try--catch--语句来容错。

简单意思是用sql语句创建数据库,创建数据表等等一些对数据库结构的操作最好不要用大于0来判断是否操作成功。

(2)sqlexecute返回值扩展阅读

c#数据执行方法:

1、使用ExecuteReader()操作数据库,执行查询操作的非常好的方法。

ExecuteReader比DataSet而言,DataReader具有较快的访问能力,并且能够使用较少的服务器资源。DataReader对象提供了游标形式的读取方式,当从结果行中读取了一行,则游标会继续读取到下一行。

通过read方法可以判断数据是否还有下一行,如果存在数据,则继续运行返回true,如果没有数据,则返回false。DataReader可以提高执行效率,基于序号的查询可以使用DataReader。

使用ExecuteReader()操作数据库,通常情况下是使用ExecuteReader()进行数据查询操作,使用ExecuteReader()查询数据能够提升查询效率,而如果需要进行数据库事务处理的话,ExecuteReader()并不是一个理想的选择。

2、使用ExecuteNonQuery(),ExecuteScalar()操作数据库,执行增删改操作的利器

ExecuteNonQuery()通常情况下为数据库事务处理的首选,当需要执行插入,删除,修改等操作时,首选ExecuteNonQuery(),ExecuteNonQuery()执行成功返回的是一受影响的行数,对于"Create Table"和"Drop Table"语句,返回值是0。

而对于其他类型的语句,返回值是-1,ExecuteNonQuery()操作数据时,可以不使用DataSet直接更改数据库中的数据。

ExecuteScalar()方法也可以用来执行SQL语句,但是executescalar()执行SQL语句后返回值与ExecuteNonQuery()并不相同,executescalar()方法的返回值的数据类型是object。

如果执行的SQL语句是查询语句,则返回结果是查询后的第一行第一列,如果执行的SQL语句不是一个查询语句,则会返回一个未实例化的对象,必须通过类型装换来显示。

一般情况下,ExecuteNonQuery()操作后返回的是一个值,而executescalar()操作后则会返回一个对象,executescalar()经常使用当需要返回单一值时的情况。例如当插入一条数据信息时,需要马上知道刚才插入的值,则可以使用executescalar()方法。

‘叁’ 如何判定这条sql语句的返回值

<%
sql = "select max(tptime) as onw from tpip where ip ='127.0.01' and id=12"
set rs = conn.execute(sql)
if isnull(rs("onw")) then
response.Write("没有对应的tptime")
else
response.Write("id为12,ip为127.0.01的最晚tptime是" & rs("onw"))
end
set rs = nothing
%>

假设conn是已经定义的数据连接

‘肆’ sql动态查询返回值的意义是什么呢

@name只是返回一个标量值,它的有无并不影响sp那个扩展存储过程的执行
如果你这个执行后,无论是否得到一个表集,都会将@name这个标量值输出
当然需要在程序中额外的方法接收
当然如果你不想用这种方式,你就想用表集的形式接收也可以
sql语句拼接时,直接select name from即可,最后一句select @out_name去掉就可以了
没有@name变量,相应的接收变量@out_name都去掉就好

这个sp_executesql存储过程的输出参数主要是为了解决拼接sql语句时,不能将拼接为字符的变量定义或输出到外面的问题,举个简单的例子

比如你要查询一个表的数量,那么where条件是动态的,这时就必须使用动态拼接sql语句
而查询得到的这个数量你需要赋值到一个变量中,用来进一步的计算或使用
这时,你用exec 执行的结果如何赋值到变量中呢?答案就是图中所示的方法

‘伍’ sql 删除语句 返回值

楼主确定这段代码没问题吗?SqlHelper.ExecuteSqlGet返回值是影响的记录数,当操作失败时,返回null。

/// <summary>

/// 执行带一个存储过程参数的的SQL语句。

/// </summary>

/// <param name="SQLString">SQL语句</param>

/// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>

/// <returns>影响的记录数</returns>

public static object ExecuteSqlGet(string SQLString, string content)

{

using (SqlConnection connection = new SqlConnection(connectionString))

{

SqlCommand cmd = new SqlCommand(SQLString, connection);

System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);

myParameter.Value = content;

cmd.Parameters.Add(myParameter);

try

{

connection.Open();

object obj = cmd.ExecuteScalar();

if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))

{

return null;

}

else

{

return obj;

}

}

catch (System.Data.SqlClient.SqlException e)

{

throw e;

}

finally

{

cmd.Dispose();

connection.Close();

}

}

}

‘陆’ sql 存储过程返回值 C#

SqlParameter[]
param={new
SqlParameter("@i_out",...};
【param[0].Direction=ParameterDirection.OutPut;】
cmd.Execute...
param[0].value;
//有返回值了。
也就是将param设置为输出参数,
执行完存储过程,param里面就有你的返回值了。

‘柒’ executeupdate()和executeUpdate(sql)用法区别 主要是参数和返回值的区别

方法executeUpdate

用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和
DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate
的返回值是一个整数(int),指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE
等不操作行的语句,executeUpdate 的返回值总为零。
如:
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//使用DriverManager获取数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","1234");
//使用Connection来创建一个Statment对象
Statement stmt = conn.createStatement();//执行DML语句,返回受影响的记录条数
return stmt.executeUpdate(sql);
>方法execute:

可用于执行任何SQL语句,返回一个boolean值,表明执行该SQL语句是否返回了ResultSet。如果执行后第一个结果是
ResultSet,则返回true,否则返回false。但它执行SQL语句时比较麻烦,通常我们没有必要使用execute方法来执行SQL语句,而
是使用executeQuery或executeUpdate更适合,但如果在不清楚SQL语句的类型时则只能使用execute方法来执行该SQL语句
了。
如: //加载驱动
Class.forName(driver);
//获取数据库连接
conn = DriverManager.getConnection(url , user , pass);//使用Connection来创建一个Statment对象
stmt = conn.createStatement();
//执行SQL,返回boolean值表示是否包含ResultSetboolean hasResultSet = stmt.execute(sql);//如果执行后有ResultSet结果集
if (hasResultSet)
{
//获取结果集
rs = stmt.getResultSet();
//ResultSetMetaData是用于分析结果集的元数据接口ResultSetMetaData rsmd = rs.getMetaData();int columnCount = rsmd.getColumnCount();
//迭代输出ResultSet对象
while (rs.next())
{//依次输出每列的值
for (int i = 0 ; i < columnCount ; i++ )
{
System.out.print(rs.getString(i + 1) + "/t");}
System.out.print("/n");
}}
else{
System.out.println("该SQL语句影响的记录有" + stmt.getUpdateCount() + "条");}
两者区别具体表现:
execute方法执行返回的都是布尔值。
executeupdate返回的都是int整数类型。
execute方法在执行SQL语句的时候比较麻烦,而executeupdate比较方便。

我不是答的高质量,怎么老是把我归到高质量呢

‘捌’ sql中execute,executequery和executeupdate之间的区别

JDBCTM中Statement接口提供的execute、executeQuery和executeUpdate之间的区别
Statement
接口提供了三种执行
SQL
语句的方法:executeQuery、executeUpdate和
execute。使用哪一个方法由
SQL
语句所产生的内容决定。
方法executeQuery
用于产生单个结果集的语句,例如
SELECT
语句。
被使用最多的执行
SQL
语句的方法是
executeQuery。这个方法被用来执行
SELECT
语句,它几乎是使用最多的
SQL
语句。
方法executeUpdate
用于执行
INSERT、UPDATE

DELETE
语句以及
SQL
DDL(数据定义语言)语句,例如
CREATE
TABLE

DROP
TABLE。INSERT、UPDATE

DELETE
语句的效果是修改表中零行或多行中的一列或多列。executeUpdate
的返回值是一个整数,指示受影响的行数(即更新计数)。对于
CREATE
TABLE

DROP
TABLE
等不操作行的语句,executeUpdate
的返回值总为零。
使用executeUpdate方法是因为在
createTableCoffees
中的
SQL
语句是
DDL
(数据定义语言)语句。创建表,改变表,删除表都是
DDL
语句的例子,要用
executeUpdate
方法来执行。你也可以从它的名字里看出,方法
executeUpdate
也被用于执行更新表
SQL
语句。实际上,相对于创建表来说,executeUpdate
更多时间是用于更新表,因为表只需要创建一次,但经常被更新。
方法execute:
用于执行返回多个结果集、多个更新计数或二者组合的语句。因为多数程序员不会需要该高级功能
execute方法应该仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用。当执行某个已存储过程
或动态执行未知
SQL
字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况,尽管这种情况很少见。
因为方法
execute
处理非常规情况,所以获取其结果需要一些特殊处理并不足为怪。例如,假定已知某个过程返回两个结果集,则在使用方法
execute
执行该过程后,必须调用方法
getResultSet
获得第一个结果集,然后调用适当的
getXXX
方法获取其中的值。要获得第二个结果集,需要先调用
getMoreResults
方法,然后再调用
getResultSet
方法。如果已知某个过程返回两个更新计数,则首先调用方法
getUpdateCount,然后调用
getMoreResults,并再次调用
getUpdateCount。
对于不知道返回内容,则情况更为复杂。如果结果是
ResultSet
对象,则方法
execute
返回
true;如果结果是
Java
int,则返回
false。如果返回
int,则意味着结果是更新计数或执行的语句是
DDL
命令。在调用方法
execute
之后要做的第一件事情是调用
getResultSet

getUpdateCount。调用方法
getResultSet
可以获得两个或多个
ResultSet
对象中第一个对象;或调用方法
getUpdateCount
可以获得两个或多个更新计数中第一个更新计数的内容。

‘玖’ 如何获取sql select语句的返回值

1、使用sp或者function;
2、将cmd绑定到一个控件(如grid),然后访问控件的单元值

‘拾’ sql语句 execute,executeQuery和executeUpdate之间的区别

PreparedStatement接口提供了三种执行
SQL
语句的方法:executeQuery、executeUpdate

execute。使用哪一个方法由
SQL
语句所产生的内容决定。
1、方法executeQuery
用于产生单个结果集的语句,例如
SELECT
语句。
被使用最多的执行
SQL
语句的方法是
executeQuery。这个方法被用来执行
SELECT
语句,它几乎是使用最多的
SQL
语句。
2、方法executeUpdate
用于执行
INSERT、UPDATE

DELETE
语句以及
SQL
DDL(数据定义语言)语句,例如
CREATE
TABLE

DROP
TABLE。INSERT、UPDATE

DELETE
语句的效果是修改表中零行或多行中的一列或多列。executeUpdate
的返回值是一个整数,指示受影响的行数(即更新计数)。对于
CREATE
TABLE

DROP
TABLE
等不操作行的语句,executeUpdate
的返回值总为零。
使用executeUpdate方法是因为在
createTableCoffees
中的
SQL
语句是
DDL
(数据定义语言)语句。创建表,改变表,删除表都是
DDL
语句的例子,要用
executeUpdate
方法来执行。你也可以从它的名字里看出,方法
executeUpdate
也被用于执行更新表
SQL
语句。实际上,相对于创建表来说,executeUpdate
用于更新表的时间更多,因为表只需要创建一次,但经常被更新。