[英]How to check return value for executequery in c# in sql server 2005?
[英]SQL SERVER 2005 return value
大家好我有以下存儲過程
@UserName varchar(150),
@UserEmail varchar(300),
@UserPassword varchar(150),
@ContactNumber varchar(150),
@ContactMobile varchar(150),
@AreaOfCountry varchar(150),
@UserId int OUTPUT,
@AllreadyReg int OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
--DECLARE @UserId int, @AllreadyReg int
IF (SELECT COUNT(UserId) FROM Users WHERE (UserName = @UserName) OR (UserEmail = @UserEmail)) > 0
BEGIN
SET @UserId = 0
SET @AllreadyReg = 1
END
ELSE
BEGIN
INSERT INTO Users (UserName,UserEmail,UserPassword,ContactNumber,ContactMobile,AreaOfCountry) VALUES (@UserName,@UserEmail,@UserPassword,@ContactNumber,@ContactMobile,@AreaOfCountry)
SELECT @UserId = SCOPE_IDENTITY()
SET @AllreadyReg = 0
END
但是當我使用c#和asp.net時它沒有返回任何東西,但是當我執行它時它確實有一個結果@UserId和@AllreadyReg但返回值是0和一個字段。
我的c#代碼在下面,但它從來沒有任何行
using (SqlConnection con = new SqlConnection(connectionString))
{
Response.Write("Line 61");
using (SqlCommand cmd = new SqlCommand("spR_Register", con))
{
Response.Write("line 64");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@UserName", TxtUsername.Text.Trim());
cmd.Parameters.AddWithValue("@UserEmail", TxtEmail.Text.Trim());
cmd.Parameters.AddWithValue("@UserPassword", TxtPassword.Text.Trim());
cmd.Parameters.AddWithValue("@ContactNumber", TxtPhone.Text);
cmd.Parameters.AddWithValue("@ContactMobile", TxtMobile.Text);
cmd.Parameters.AddWithValue("@AreaOfCountry", TxtAreaOfCountry.SelectedValue);
cmd.Parameters.AddWithValue("@UserId", ParameterDirection.Output);
cmd.Parameters.AddWithValue("@AllreadyReg", ParameterDirection.Output);
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
Response.Write("line 78");
etc etc
有誰可以幫忙
謝謝
使用編輯:錯誤是在不選擇數據網格的命令上使用ExecuteReader
- 應該使用ExecuteNonQuery
。
這里重要的是如何添加參數。 例如:
var alreadyReg = cmd.CreateParameter();
alreadyReg.Direction = System.Data.ParameterDirection.Output;
alreadyReg.ParameterName = "AllreadyReg";
alreadyReg.DbType = DbType.Int32;
cmd.Parameters.Add(alreadyReg);
//...
cmd.ExecuteNonQuery();
//...
int val = (int)alreadyReg.Value;
根據DbCommand
對象的類型,可能會有一個重載在一行中接受所有這些 - 上面假設只是DbCommand
。 使用SqlCommand
,您可以簡化一下:
var alreadyReg = cmd.Parameters.Add("AllreadyReg", SqlDbType.Int);
alreadyReg.Direction = ParameterDirection.Output;
//...
cmd.ExecuteNonQuery();
//...
int val = (int)alreadyReg.Value
這里
cmd.Parameters.AddWithValue("@UserId", ParameterDirection.Output);
AddWithValu的錯誤用法e。 第二個參數被解析為參數值,而不是方向類型。 使用適當的參數構造函數並將結果添加到集合中。
您可能已經處理過它,但為了以防萬一,請確保在c#代碼中指定參數的方向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.