【问题标题】:Strange result return from sql server从sql server返回奇怪的结果
【发布时间】:2009-03-13 23:24:03
【问题描述】:

我正在处理我的项目,并且使用 asp.net C# 和返回标量变量的存储过程产生了奇怪的结果。简而言之,我试图返回用户名,但是我只得到名称的第一个字母,这很奇怪。

我检查了代码几十次;但是我仍然找不到错误。 如果有人能找到我的赌注,我将不胜感激

这是我的存储过程:

set ANSI_NULLS ON
GO
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [one_two].[team5GetLostPassword]
(
    @user_password varchar(50),
    @email varchar(50),
    @user_name varchar(50) out,
    @user_exist int out
)
AS
BEGIN
    declare @user_fname varchar(50);
    declare @user_lname varchar(50);
    declare @user_id int;

    set @user_exist = 0;
    SET NOCOUNT ON;

    IF EXISTS(select user_email from team5_user_detail where user_email LIKE @email)
    begin
        set @user_id = (select userid from team5_user_detail where user_email Like @email);
        update team5_user Set user_password = @user_password where userid = @user_id;
        set @user_name = (select user_lname from team5_user_detail where userid = @user_id);
        set @user_exist = 1;
    end
END

还有我的 C# 代码

protected bool IsValidUser()
{
    myConn = new SqlConnection(myConStr);
    myCommand = new System.Data.SqlClient.SqlCommand("team5GetLostPassword", myConn);
    myCommand.CommandType = CommandType.StoredProcedure;
    myCommand.Parameters.AddWithValue("@user_password", userPasswordEncrypted);
    myCommand.Parameters.AddWithValue("@email", userEmailString);

    myCommand.Parameters.AddWithValue("@user_name", "").Direction = ParameterDirection.Output;
    myCommand.Parameters.AddWithValue("@user_exist", 0).Direction = ParameterDirection.Output;

    try
    {
        myConn.Open();
        myCommand.ExecuteScalar();
        userExist = myCommand.Parameters["@user_exist"].Value.ToString();
        userName = myCommand.Parameters["@user_name"].Value.ToString();
    }
    catch (Exception exep)
    {
    }
    finally
    {
        myConn.Close();
    }

    if (userExist.Contains("1"))
        return true;
    else
        return false;
}

【问题讨论】:

  • Keltex,非常感谢,您的回答解决了问题。我将代码更改为并添加了 size 属性,它开始向我返回正确的完整用户名。非常感谢

标签: c# .net asp.net sql-server ado.net


【解决方案1】:

你需要将SqlParameter的Size属性设置为你想要返回的数据长度。

在这种情况下,我认为您不想使用 ExecuteScalar()。当您想要返回结果集中第一行的第一列时,使用 ExecuteScalar()。由于您尝试从输出参数中获取值,因此您希望使用 ExecuteNonQuery()。

【讨论】:

  • 我把它改成了 myCommand.ExecuteNonQuery(); 但仍然只得到名字的第一个字母。
  • 但是你改变了 size 属性吗?
  • Keltex,非常感谢,您的回答解决了问题。我将代码更改为并添加了 size 属性,它开始向我返回正确的完整用户名。非常感谢
【解决方案2】:

尝试将用户名参数的 Length 属性设置为 50。

【讨论】:

  • 我认为你的意思是 Size 属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
  • 2012-08-08
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多