[英]Get result from query using stored procedure
我的程序包含一個gridview的行,我想檢查它們是否已經計費。
我通過檢查存儲項目ID的列來做到這一點。
我有以下存儲過程:
ALTER PROCEDURE [dbo].[getBilledItem]
@itemID int
AS
BEGIN
SET NOCOUNT ON;
SELECT [items].[dbo].[itemLine].itemID
FROM [items].[dbo].[itemLine]
WHERE description LIKE '%' + cast(@itemID AS VARCHAR(255)) + '%'
END
我要在程序中執行的操作是在存儲過程返回1 row(s) affected
添加itemID,但這行不通。
我的代碼如下:
using (var conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Database"].ConnectionString))
using (var command = new SqlCommand("getBilledItem", conn)
{
CommandType = CommandType.StoredProcedure
})
{
command.Parameters.Add(new SqlParameter("@itemID", SqlDbType.Int)).Value = itemID;
conn.Open();
int amount = command.ExecuteNonQuery();
if (amount > 0)
{
AlreadyBilledIDs.Add(itemID.ToString());
}
}
即使我的存儲過程確實返回了一行,程序也不會捕獲它。
我在代碼中做錯了什么? 我以為CommandExecuteNonQuery
會返回受影響的行數? 為什么這對我來說不起作用?
您需要的是ExecuteScalar
方法,當我們只有一行返回一行時使用該方法,或者在這種情況下也有多行的情況下,它將僅選擇第一行的第一列。
所以你可以做:
int amount = Convert.ToInt32(command.ExecuteScalar());
如果需要行數,則可以在存儲過程中使用Count()
,並且c#代碼將保持不變,只需將查詢修改為:
SELECT Count([items].[dbo].[itemLine].itemID)
.............
.............
現在您將擁有查詢返回的總行數:
int count = Convert.ToInt32(command.ExecuteScalar());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.