當前位置:首頁 » 編程語言 » 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
用於更新表的時間更多,因為表只需要創建一次,但經常被更新。