2009-08-31 4 views
1

Sqlcommand.Parameters에 숫자를 추가하는 방법?

public void EjecutarGuardar(string ProcedimientoAlmacenado, object[] Parametros) 
     { 
      SqlConnection Connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 

      SqlCommand Command = Connection.CreateCommand(); 
      Command.CommandText = ProcedimientoAlmacenado; 
      Command.CommandType = CommandType.StoredProcedure; 
      foreach (object X in Parametros) 
      { 
       Command.Parameters.Add(X); 
      }    

      Connection.Open(); 
      Command.ExecuteNonQuery(); 
      Connection.Close(); 

      Connection.Dispose(); 
     } 

내 객체 배열 PARAMETROS에 int를 추가했다고 가정 해보십시오. foreach 문에 도달하면 오류가 발생합니다.

The SqlParameterCollection only accepts non-null SqlParameter type objects, not Int32 objects.

그러면 어떻게 모든 이 클래스 외부의 매개 변수를 가져온 다음 일반 배열에 모두 배치하고이 메서드로 전달하여 마법을 수행합니다. 어떤 도움이 필요합니까?

편집 : 친구가이 코드를 보냈습니다. 작동합니까? 나는 그것이 무엇을하는지 이해할 수 없다. : S

protected void CargarParametros(SqlCommand Com, System.Object[] Args) 
     {     
      for (int i = 1; i < Com.Parameters.Count; i++) 
      { 
       SqlParameter P = (SqlParameter)Com.Parameters[i]; 
       if (i <= Args.Length) 
        P.Value = Args[i - 1]; 
       else 
        P.Value = null; 
      } 
     } 
+1

은'Parameters.AddWithValue'를 사용하지 왜 다른 질문 http://stackoverflow.com/questions/1355643/trouble-using-my-stored-procedure –

답변

0

:

는 SQL 명령 예 :

이 명령에 대한 매개 변수를 추가하려면 :

Command.Parameters.Add(new SqlParameter("@YourParameterID", SqlDbType.Int).Value = X); 
+0

에 대한 내 대답을 참조하십시오? 많이 쉬워졌습니다. –

0

. ADO.NET이 숫자 그리고 당신은이 작업을 수행 할 경우 적절한 데이터 유형을 삽입합니다 알 :

Command.Parameters.Add(new SqlParameter("@YourParameterID", 4)); 

또한, 당신이 NULL NOT 데이터 필드에 NULL을 삽입하지하고 있는지 확인, SqlParameter 형식으로 암시 적으로 캐스팅 할 수 있습니다. 사용 AddWithValue 방법

+1

왜'Parameters.AddWithValue'를 사용하지 않을까요 ?? 훨씬 쉬워 보인다 .... –

4

,

string []para={"@eno","@ename","@edate"}; 
object []val={11,"A","1-1-2002"}; 

System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection(@""); 
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(); 
cmd.CommandText = "proc_name"; 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Connection = cn; 
for(int i=0;i<para.Length;i++){ 
    cmd.Parameters.AddWithValue(para[i], val[i]); 
} 

cn.Open(); 
cmd.ExecuteNonQuery(); 
cn.Close(); 
1

귀하의 SqlCommand를 저장 프로 시저를 래핑합니다. 이를 호출하려면 스토어드 프로 시저에 전달하거나 스토어드 프로 시저에서 빠져 나오는 각 매개 변수에 대해 SqlParameter의 인스턴스를 작성해야합니다. 단순히 값을 추가 할 수는 없습니다. ADO.NET은 어떤 값을 어떤 매개 변수에 할당할지 어떻게 알 수 있습니까?

SqlParameter은 같은 것들을 포함

  • 이름
  • 의 데이터 타입
  • 가능 (크기, 길이) 제한
  • 과 가능성 값을

그래서 당신은 - 당신이 그들의 이름, 데이터 유형, 길이 등을 그 값으로 이러한 매개 변수를 캡처해야

SqlCommand Command = Connection.CreateCommand(); 
Command.CommandText = ProcedimientoAlmacenado; 
Command.CommandType = CommandType.StoredProcedure; 

foreach (object X in Parametros) 
{ 
    SqlParameter param = new SqlParameter(); 
    param.ParameterName = Parametros.Name; 
    // you need to find a way to determine what DATATYPE the 
    // parameter will hold - Int, VarChar etc. 
    param.SqlDbType = SqlDbType.Int; 
    param.Value = Parametros.Value; 

    Command.Parameters.Add(param); 
}   

그래서, 단지 값을 추가하는 것은 작동하지 않을 : R 경우, 명세서는 다음과 같이 보일 것입니다.

마크

관련 문제