我的登录页面中有两个实例,具体取决于作为vat返回的内容(从下面的存储过程返回变量),当我在服务器上执行存储过程时,结果是INTERNAL
,但条件是else
上的INTERNAL
在登录页面上执行而不是string usertype = u.ViewUserType((int)Session["Id"]);
string vattype = u.ViewUserVat((string)Session["Code"]);
if (usertype == "Client")
{
if (vattype == "INTERNAL")
{
Response.Redirect("~/NonIFAClient/");
}
else
{
Response.Redirect("~/Client/");
}
}
public string ViewUserVat(string code)
{
CamOnlineAccess.Utilities u = new CamOnlineAccess.Utilities();
SqlCommand c = u.GetCommandSP("dbo.ViewUserVat");
c.Parameters.AddRange(new System.Data.SqlClient.SqlParameter[] {
new System.Data.SqlClient.SqlParameter("@code",System.Data.SqlDbType.VarChar,50),
new System.Data.SqlClient.SqlParameter("@vat",SqlDbType.VarChar, 50, System.Data.ParameterDirection.Output, false, ((byte)(0)), ((byte)(0)), "", System.Data.DataRowVersion.Current, null)});
c.Parameters["@code"].Value = code;
c.Connection.Open();
c.ExecuteScalar(); // because we have output parameters
c.Connection.Close();
return (string)c.Parameters["@vat"].Value;
}
。
ALTER PROCEDURE [dbo].[ViewUserVat]
-- Add the parameters for the stored procedure here
@code varchar,
@vat varchar(50) output
AS
SELECT
TOP 1 @vat = vattable
FROM
dbo.portfolio
WHERE
owner = @code
存储过程:
{{1}}
答案 0 :(得分:0)
在比较中可能存在空格或投射问题
尝试
c.ExecuteScalar();//because we have output parameters
c.Connection.Close();
String value = (string)c.Parameters["@vat"].Value;
value = value.Trim().ToUpper();
return (string)c.Parameters["@vat"].Value;
答案 1 :(得分:0)
有几种方法可以从存储过程返回数据 - 您可以使用RETURN
,可以执行普通SELECT
,并且可以使用输出参数。访问此值的方法有所不同,具体取决于方法 - ExecuteScalar
,ExecuteNonQuery
,... - 用于执行查询。它还受SET NOCOUNT
影响,如果返回受影响的行数,甚至 - 如果我没记错的话 - 是声明存储过程的方式。
自从我上次不得不弄乱这件事以来,已经有一段时间了,我不记得所有的细节,也不知道有一个全面的清单给出了所有细节。但我确信以下内容适用于您的情况。
更改存储过程以返回单列
的单行ALTER PROCEDURE [dbo].[ViewUserVat]
@code varchar
AS
SELECT
TOP 1 vattable
FROM
dbo.portfolio
WHERE
owner = @code
并使用ExecuteScalar()
返回的值。
public String ViewUserVat(String code)
{
var command = CamOnlineAccess.Utilities().GetCommandSP("dbo.ViewUserVat"))
try
{
command.Parameters.AddWithValue("@code", code);
command.Connection.Open();
return (String)command.ExecuteScalar();
}
finally
{
command.Connection.Close();
command.Dispose();
}
}