2009-03-13 22 views
1

私は自分のプロジェクトに取り組んでおり、asp.net C#と奇妙な結果を出しており、スカラー変数を返すストアドプロシージャです。要するに、私はユーザー名を返そうとしていますが、名前の最初の文字は奇妙です。SQL Serverから奇妙な結果が返される

私はコードを数十回繰り返しました。しかし、私はまだエラーを見つけることができません。誰かがmystakeここ

を見つけることができる場合、私は本当に感謝 である私のストアドプロシージャ:

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; 
} 
あなたはSqlParameterのサイズプロパティを設定する必要が
+0

Keltex、 にユーザ名パラメータのLengthプロパティを設定してみてくださいあなたの答えは、問題を解決している、ありがとうございました。 コードを変更してsizeプロパティを追加したところ、適切なフルユーザー名を返すようになりました。 ありがとうございました –

答えて

3

返されるデータの長さ。

この場合、ExecuteScalar()を使用するとは思われません。 ExecuteScalar()は、結果セットの最初の行の最初の列を返す場合に使用されます。出力パラメータから値を取得しようとしているので、ExecuteNonQuery()を使用します。

+0

私はそれを に変更しました myCommand.ExecuteNonQuery(); まだ名前の最初の文字だけを取得しています。 –

+0

しかし、サイズのプロパティを変更しましたか? – royatl

+0

Keltex、ありがとう、あなたの答えが問題を解決しました。私はコードを変更して、sizeプロパティを追加し、適切なフルユーザ名を返し始めました。ありがとうございます –

1

は50

+0

私はあなたがサイズプロパティを意味すると思います。 – Keltex