2016-12-29 12 views
0

id = 1を入力すると、id = 1のすべての人の名前が返されます。そのIDはタイプstringのリストにあります。私は次のことを試しましたが、何らかの理由でリストが常にnullを返し、結果がリストに格納されない理由を見つけることができません。c#asp.netのSQL Serverストアドプロシージャから複数の行を返す?

私の間違いを理解するのを助けてください。これはこれまで私が試したことです。次の行にエラーが表示され、なぜエラーが続くのか理解できません。

fname = rdr["Fullname"].ToString; 
names.add(fname); 

SQL Serverコード:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[login_users] 
    (@uname NVARCHAR(50), @pass NVARCHAR(50)) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT UserName, Password, Fullname 
    FROM dbo.users 
    WHERE UserName = @uname AND [Password] = @pass 
END 

C#コード:

protected void LogIn_Click(object sender, EventArgs e) 
{ 
    establishconnection(); 

    String username = usernamelogin.Text; 
    String password = passwordlogin.Text; 

    String fname = null; 

    List<String> names; 

    establishconnection(); 

    try 
    { 
     cnn.Open(); 

     SqlCommand cmd = new SqlCommand("dbo.login_users", cnn); 
     cmd.CommandType = CommandType.StoredProcedure; 

     cmd.Parameters.Add(new SqlParameter("@uname", username)); 
     cmd.Parameters.Add(new SqlParameter("@pass", password)); 

     using (SqlDataReader rdr = cmd.ExecuteReader()) 
     { 
      // iterate through results, printing each to console 
      while (rdr.Read()) 
      { 
       fname = rdr["Fullname"].ToString; 
       names.add(fname); 
      } 
     } 

     cnn.Close(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 
+0

NVARCHARとして @uname(50)= ' ' NVARCHARとして @pass(50)='' ストアprocedure' 'でこの宣言ミスを試します –

答えて

0

あなたは新しいアイテムを追加することができます前に、リストをインスタンス化する必要があります。

.... 
List<string> names = new List<string>(); 
..... 
関連する問題