컬렉션에 '? user_email'매개 변수가 없습니다.

압둘 라만

Visual Studio 2015, Windows 10, 64 비트에서 MySql 5.6x를 사용하고 있습니다. 프로그래밍 언어로서의 C #. 내 CRUD.cs (클래스 파일)에서 다음 방법을 만들었습니다.

public bool dbQuery(string sql,string[] paramList= null)
{
    bool flag = false;
    try
    {
        connect();
        cmd = new MySqlCommand(sql,con);
        cmd.Prepare();
        if(paramList != null){ 
         foreach(string i in paramList){
                string[] valus = i.Split(',');
                string p = valus[0];
                string v = valus[1];
                cmd.Parameters[p].Value = v;
            }
         }
        if (cmd.ExecuteNonQuery() > 0)
        {
            flag = true;
        }
    }
    catch (Exception exc)
    {
        error(exc);
    }
   }

다음과 같이 쿼리 및 매개 변수 목록을 전달합니다.

  protected void loginBtn_Click(object sender, EventArgs e)
  {
    string sql = "SELECT * FROM dept_login WHERE (user_email = ?user_email OR user_cell = ?user_cell) AND userkey = ?userkey";
    string[] param = new string[] {
         "?user_email,"+ userid.Text.ToString(),
         "?user_cell,"+ userid.Text.ToString(),
         "?userkey,"+ userkey.Text.ToString()
    };
    if (db.dbQuery(sql, param))
    {
        msg.Text = "Ok";
    }
    else
    {
        msg.Text = "<strong class='text-danger'>Authentication Failed</strong>";
    }
  }

이제 문제는 루프 반복이 완료된 후 catch () 블록으로 직접 점프하여 다음과 같은 예외를 생성한다는 것입니다.

Parameter '?user_email' not found in the collection.

그런 매개 변수를 보내기 위해 올바르게 수행하고 있습니까? 동일한 작업을 수행하는 다른 방법이 있습니까? 감사

편집 : 가장 좋은 방법은 매개 변수와 해당 값을 수집하고 cmd.AddWidthValues ​​()에서 매개 변수를 가져 오는 메서드 내에서 반복하는 2 차원 배열 일 수 있다고 생각합니까? 내가 틀렸을지도 몰라 ...

스티브

당신에 dbQuery 존재하지 않는 매개 변수의 값을 설정하려고하면 오류를 얻을 수 있도록, 예상 이름으로 매개 변수 컬렉션을 생성하지 않는

public bool dbQuery(string sql,string[] paramList= null)
{
    bool flag = false;
    try
    {
        connect();
        cmd = new MySqlCommand(sql,con);
        cmd.Prepare();
        if(paramList != null){ 
            foreach(string i in paramList){
                string[] valus = i.Split(',');
                string p = valus[0];
                string v = valus[1];
                cmd.Parameters.AddWithValue(p, v);
            }
        }
        if (cmd.ExecuteNonQuery() > 0)
           flag = true;
    }
    catch (Exception exc)
    {
        error(exc);
    }
}

물론 이것은 데이터 유형이 문자열과 같은 모든 매개 변수를 추가하므로 데이터 테이블 열이 문자열 유형이 아닌 경우 오류가 발생하기 쉽습니다.

더 나은 접근 방식은 이것입니다

List<MySqlParameter> parameters = new List<MySqlParameter>()
{
   {new MySqlParameter() 
        { 
           ParameterName = "?user_mail", 
           MySqlDbType= MySqlDbType.VarChar,
           Value = userid.Text
         },
   {new MySqlParameter() 
        { 
           ParameterName = "?user_cell", 
           MySqlDbType= MySqlDbType.VarChar,
           Value = userid.Text
         },

   {new MySqlParameter() 
        { 
           ParameterName = "?userkey", 
           MySqlDbType = MySqlDbType.VarChar,
           Value = userkey.Text
         },

}
if (db.dbQuery(sql, parameters))
 ....

그리고 dbQuery 에서 목록을 받아 매개 변수 컬렉션에 추가합니다.

public bool dbQuery(string sql, List<MySqlParameter> paramList= null)
{
    bool flag = false;
    try
    {
        connect();
        cmd = new MySqlCommand(sql,con);
        cmd.Prepare();
        if(paramList != null)
         cmd.Parameters.AddRange(paramList.ToArray());

        if (cmd.ExecuteNonQuery() > 0)
        {
            flag = true;
        }
    }
    catch (Exception exc)
    {
        error(exc);
    }
}

그건 그렇고, 실제 문제와 관련이 없지만 코드가 연결을 닫고 처분하지 않는 것 같습니다. 이것은 진단하고 고치는 매우 심한 문제로 이어질 것입니다. using 문을 사용하고 전역 연결 변수를 피하십시오.

편집 ExecuteNonQuery가 SELECT 문과 함께 작동하지 않는다는 것을 알았으므로 ExecuteReader를 사용하고 반환 값이 있는지 확인해야합니다.

    using(MySqlDataReader reader = cmd.ExecuteReader())
    {
        flag = reader.HasRows;
    }

이것은 물론 ExecuteNonQuery가 필요한 곳에 레코드를 삽입, 업데이트 또는 삭제할 때 문제가 발생 함을 의미합니다. 다른 종류의 쿼리를 처리하는 범용 함수를 만드는 것은 매우 어렵고 필요한 작업과 디버그의 가치가 없습니다. EntityFramework 또는 Dapper와 같은 잘 알려진 ORM 소프트웨어를 사용하는 것이 좋습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

SpringData 쿼리 매개 변수에서 컬렉션 유효성 검사가 비어 있지 않습니다.

분류에서Dev

MongoDB 컬렉션에 개체를 2 개 이상 추가 할 수 없습니다.

분류에서Dev

Postman : Newman 컬렉션 러너가 호출과 함께 본문에 양식 URL 인코딩 매개 변수를 보낼 수 없습니다.

분류에서Dev

ID가 'PmData.SafetyRequirement_Assets'인 멤버가 메타 데이터 컬렉션에 없습니다. \ r \ n 매개 변수 이름 : identity

분류에서Dev

매개 변수가 아닌 다른 변수에서 매개 변수 변수를 사용할 수 없습니다.

분류에서Dev

다른 컬렉션에 개체 컬렉션 추가

분류에서Dev

Automapper-중첩 된 개체 / 컬렉션을 매핑 할 수 없습니다.

분류에서Dev

JsonObject에서 매개 변수를 가져올 수 없습니다.

분류에서Dev

URL에서 매개 변수를 가져올 수 없습니다.

분류에서Dev

Sklearn 추가 : KMedoids에 '방법'매개 변수가 없습니다.

분류에서Dev

내 SQL 저장 프로 시저 컬렉션에서 매개 변수를 찾을 수 없습니까?

분류에서Dev

Google Earth Engine의 이미지 컬렉션에서 특정 매개 변수의 배열을 가져옵니다.

분류에서Dev

301 라우터 리디렉션의 URL에서 페이지 매개 변수를 가져올 수 없습니다.

분류에서Dev

SSRS에서 단일 값 매개 변수를 선택하면 값 컬렉션을 반환 할 수 있습니다.

분류에서Dev

SSRS에서 단일 값 매개 변수를 선택하면 값 컬렉션을 반환 할 수 있습니다.

분류에서Dev

Find-Package에는 -ScriptSourceLocation 매개 변수가 없습니다.

분류에서Dev

Rails : API에 강력한 매개 변수가 없습니다.

분류에서Dev

매개 변수 증거에 대한 암시가 없습니다.

분류에서Dev

object.type에 매개 변수 오류가 없습니다.

분류에서Dev

Ajax 요청에 매개 변수가 없습니다.

분류에서Dev

TypeError : mongodb에서 '컬렉션'개체를 호출 할 수 없습니다.

분류에서Dev

호출시 매개 변수 '옵션'에 대한 인수가 없습니다.

분류에서Dev

RETURN은 OUT 매개 변수가있는 함수에 매개 변수를 가질 수 없습니다.

분류에서Dev

세션 값을 매개 변수 컬렉션에 어떻게 전달할 수 있습니까?

분류에서Dev

PHP가 URL에서 매개 변수를 가져올 수 없습니다.

분류에서Dev

JSF가 URL에서 매개 변수를 가져올 수 없습니다.

분류에서Dev

필수 형식 매개 변수에 해당하는 인수가 없습니다.

분류에서Dev

필수 매개 변수에 해당하는 인수가 없습니다.

분류에서Dev

DRF PrimaryKeyRelatedField, AttributeError : 'QuerySet 개체에 속성 매개 변수가 없습니다.'

Related 관련 기사

  1. 1

    SpringData 쿼리 매개 변수에서 컬렉션 유효성 검사가 비어 있지 않습니다.

  2. 2

    MongoDB 컬렉션에 개체를 2 개 이상 추가 할 수 없습니다.

  3. 3

    Postman : Newman 컬렉션 러너가 호출과 함께 본문에 양식 URL 인코딩 매개 변수를 보낼 수 없습니다.

  4. 4

    ID가 'PmData.SafetyRequirement_Assets'인 멤버가 메타 데이터 컬렉션에 없습니다. \ r \ n 매개 변수 이름 : identity

  5. 5

    매개 변수가 아닌 다른 변수에서 매개 변수 변수를 사용할 수 없습니다.

  6. 6

    다른 컬렉션에 개체 컬렉션 추가

  7. 7

    Automapper-중첩 된 개체 / 컬렉션을 매핑 할 수 없습니다.

  8. 8

    JsonObject에서 매개 변수를 가져올 수 없습니다.

  9. 9

    URL에서 매개 변수를 가져올 수 없습니다.

  10. 10

    Sklearn 추가 : KMedoids에 '방법'매개 변수가 없습니다.

  11. 11

    내 SQL 저장 프로 시저 컬렉션에서 매개 변수를 찾을 수 없습니까?

  12. 12

    Google Earth Engine의 이미지 컬렉션에서 특정 매개 변수의 배열을 가져옵니다.

  13. 13

    301 라우터 리디렉션의 URL에서 페이지 매개 변수를 가져올 수 없습니다.

  14. 14

    SSRS에서 단일 값 매개 변수를 선택하면 값 컬렉션을 반환 할 수 있습니다.

  15. 15

    SSRS에서 단일 값 매개 변수를 선택하면 값 컬렉션을 반환 할 수 있습니다.

  16. 16

    Find-Package에는 -ScriptSourceLocation 매개 변수가 없습니다.

  17. 17

    Rails : API에 강력한 매개 변수가 없습니다.

  18. 18

    매개 변수 증거에 대한 암시가 없습니다.

  19. 19

    object.type에 매개 변수 오류가 없습니다.

  20. 20

    Ajax 요청에 매개 변수가 없습니다.

  21. 21

    TypeError : mongodb에서 '컬렉션'개체를 호출 할 수 없습니다.

  22. 22

    호출시 매개 변수 '옵션'에 대한 인수가 없습니다.

  23. 23

    RETURN은 OUT 매개 변수가있는 함수에 매개 변수를 가질 수 없습니다.

  24. 24

    세션 값을 매개 변수 컬렉션에 어떻게 전달할 수 있습니까?

  25. 25

    PHP가 URL에서 매개 변수를 가져올 수 없습니다.

  26. 26

    JSF가 URL에서 매개 변수를 가져올 수 없습니다.

  27. 27

    필수 형식 매개 변수에 해당하는 인수가 없습니다.

  28. 28

    필수 매개 변수에 해당하는 인수가 없습니다.

  29. 29

    DRF PrimaryKeyRelatedField, AttributeError : 'QuerySet 개체에 속성 매개 변수가 없습니다.'

뜨겁다태그

보관