2010-08-18 6 views
0

안녕 콘솔을 사용하여 저장 프로 시저에서 출력을 얻을하지만 오류 메시지가내가 콘솔에서 출력을 생성하기 위해 노력하고있어

절차 또는 함수 'p_Date_sel' 이 매개 변수를 기대를 받고 계속 '@DateID'이었다 제공되지 않음

DateID를 가져와 모든 데이터를 표시한다고 가정 할 때 내가 잘못하고있는 것을 말해주십시오.

다음은 내 저장 프로 시저입니다

ALTER procedure [dbo].[p_Date_sel] 
@DateID int 

AS 
BEGIN 
SELECT DateTypeID , Date , Name, Notes 
FROM dbo.Dates 
WHERE DateID= @DateID 
END 

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Text; 


namespace ExecuteStoredProcedure 
{ 
    class Program 
    { 
     private int _dateID; 
     private int _dateTypeID; 
     private DateTime _date; 
     private string _name; 
     private string _notes; 

     public Program() 
     { 
      _dateID = 0; 
     } 

     public Program(int dateID) { 
      _dateID = dateID; 
     } 
     public Program(int datetypeID,DateTime date,string name,string notes){ 

      _dateTypeID = datetypeID; 
      _date = date; 
      _name = name; 
      _notes = notes; 
     } 

     public int dateID 
     { 
      get {return _dateID;} 
     } 
     public int dateTypeID 
     { 
      get { return _dateTypeID; } 
      set { _dateTypeID = value; } 
     } 
     public DateTime date 
     { 
      get {return _date ;} 
      set { _date = value;} 
     } 
     public string name 
     { 
      get { return _name;} 
      set { _name = value; } 
     } 
     public string notes 
     { 
      get { return _notes;} 
      set { _notes = value; } 
     } 

     public void LoadData() 
     { 
      SqlConnection conn = new SqlConnection("Data Source=mycbj01psql03\\sandbox01;Initial Catalog=DBRMS;Integrated Security=True"); 
      conn.Open(); 
      SqlCommand command = new SqlCommand("p_Date_sel", conn); 
      command.CommandType = CommandType.StoredProcedure; 
      SqlDataReader reader = command.ExecuteReader(); 

      while (reader.Read()) 
      { 
       _dateTypeID = Convert.ToInt16(reader["DateTypeID"]); 
       _date = Convert.ToDateTime(reader["Date"]); 
       _name = reader["Name"].ToString(); 
       _notes = reader["Notes"].ToString(); 
      } 


      reader.Close(); 
      conn.Close(); 

      } 
    } 
} 

내 주요 프로그램

namespace ExecuteStoredProcedure 
    { 
    class TestClass 
    { 
     public static void Main(string[] args) 
     { 

      Program p = new Program(5); 
      p.LoadData(); 

      Console.WriteLine("DateID = " + "" + p.dateID); 
      Console.WriteLine("DateTypeID = " + "" + p.dateTypeID); 
      Console.WriteLine("Date = " + "" + p.date); 
      Console.WriteLine("Name = " + "" + p.name); 
      Console.WriteLine("Notes = " + "" + p.notes); 

      Console.ReadLine(); 
     } 
    } 
} 

답변

1

글쎄, 당신은 @DateID에 대한 값을 제공해야합니다!

귀하의 저장된 프로 시저가 INT@DateID라고하거나 입력 매개 변수가 필요합니다

ALTER procedure [dbo].[p_Date_sel] 
@DateID int 

를하지만, 전화, 당신은 결코 지금과 같은 값을 제공 않습니다!

당신이해야 할 일은 SqlParameter을 생성하고 그 값을 저장 프로 시저에 전달하는 것입니다. 또한 SQL 클라이언트 코드에 using() {...} 구문을 사용하는 것이 좋습니다. 그리고 마지막 권장 사항으로 DateIDLoadData() 메서드의 매개 변수로 사용하는 것이 어떻습니까?

public void LoadData(int dateID) 
{ 
    using(SqlConnection conn = new SqlConnection("Data Source=mycbj01psql03\\sandbox01;Initial Catalog=DBRMS;Integrated Security=True")) 
    { 
     using(SqlCommand command = new SqlCommand("p_Date_sel", conn)) 
     { 
      command.CommandType = CommandType.StoredProcedure; 

      // define the parameter and give it a value! 
      command.Parameters.Add("@DateID", SqlDbType.Int); 
      command.Parameters["@DateID"].Value = dateID; 

      conn.Open(); 

      using(SqlDataReader reader = command.ExecuteReader()) 
      { 
       while (reader.Read()) 
       { 
       _dateTypeID = Convert.ToInt16(reader["DateTypeID"]); 
       _date = Convert.ToDateTime(reader["Date"]); 
       _name = reader["Name"].ToString(); 
       _notes = reader["Notes"].ToString(); 
       } 

       reader.Close(); 
      } 

      conn.Close(); 
     } 
    } 

그런 식으로, 당신은 당신의 저장된 프로 시저를 받아야합니다 .... 매우 효율적이고 유용하지 - 당신이 지금 가지고있는 식으로, 당신은 검색하려는 각 값에 대해 클래스의 인스턴스를 생성해야 올바르게 작동. 기본 앱에서 다음과 같이 호출합니다.

Program p = new Program(); 
p.LoadData(5); 
관련 문제