programing

C#을 사용한 MySQL에 대한 매개변수화된 쿼리

goodsources 2023. 11. 2. 21:41
반응형

C#을 사용한 MySQL에 대한 매개변수화된 쿼리

아래 코드가 있습니다(모든 관련 섹션이라고 생각되는 내용을 포함했습니다).

private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = ? AND VAL_@ = ?;";
public bool read(string id)
{
    level = -1;
    MySqlCommand m = new MySqlCommand(readCommand);
    m.Parameters.Add(new MySqlParameter("", val1));
    m.Parameters.Add(new MySqlParameter("", val2));
    MySqlDataReader r = m.ExecuteReader();
    if (r.HasRows)
        level = Convert.ToInt32(r.GetValue(0).ToString());
    r.Close();
    return true;
}

이 작업을 실행하면 첫 번째 매개 변수를 추가할 때 IndexOutOfBoundsException이 표시됩니다.제가 무엇을 잘못했지요?

대신 이 방법을 사용해 보십시오.

private String readCommand = 
             "SELECT LEVEL FROM USERS WHERE VAL_1 = @param_val_1 AND VAL_2 = @param_val_2;";

public bool read(string id)
{
    level = -1;
    MySqlCommand m = new MySqlCommand(readCommand);
    m.Parameters.AddWithValue("@param_val_1", val1);
    m.Parameters.AddWithValue("@param_val_2", val2);
    level = Convert.ToInt32(m.ExecuteScalar());
    return true;
}
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
    MySqlConnection con = new MySqlConnection("server=localhost;User Id=root;database=result;password=1234");
    con.Open();

    MySqlCommand cmd = new MySqlCommand("Select * from users where username=?username and password=?password", con);
    cmd.Parameters.Add(new MySqlParameter("username", this.Login1.UserName));
    cmd.Parameters.Add(new MySqlParameter("password", this.Login1.Password)); 

    MySqlDataReader dr = cmd.ExecuteReader();
    if (dr.HasRows ==true)
    {
        e.Authenticated = true;
    }
}

쿼리에 명명된 매개 변수를 사용해야 합니다.예:

String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = ?param1 AND VAL_2 = ?param2";

그런 다음 MySqlParameter 개체를 다음과 같이 인스턴스화할 때 매개 변수 이름을 전달합니다.

m.Parameters.Add(new MySqlParameter("param1", val1));
m.Parameters.AddWithValue("parameter",value) 

매개 변수화된 쿼리의 경우 더 나은 옵션이 될 것입니다.

MySql은 아닌 것 같습니다.데이터 클래스는 이름 없는 매개 변수를 지원합니다.사용하고 싶다면 Odbc 드라이버를 통해 MySql db에 액세스할 수 있습니다.

쿼리의 매개 변수 이름을 지정해야 합니다.

"SELECT LEVEL FROM USERS WHERE VAL_1 = @val1 AND VAL_2 = @val2;"

매개 변수 지시자 "@"을 선택했지만 MySql의 최근 버전을 선택했습니다.데이터는 "@"와 "?"를 모두 지원합니다.

그런 다음 올바른 매개 변수 이름을 전달하도록 매개 변수 생성기를 업데이트합니다(여기에 매개 변수 표시기를 포함할 필요는 없지만).

m.Parameters.Add(new MySqlParameter("val1", val1));

추신. 이미 알고 계시거나, 토막글에서 누락된 것일 수도 있지만, ExecuteReader의 인스턴스에서 Read를 호출하는 것을 잊어버리신 것 같습니다.

sql을 여러 번 실행하려면 다음 방법을 사용해야 합니다.

conn.Open();
cmd.Connection = conn;

cmd.CommandText = "INSERT INTO myTable VALUES(NULL, @number, @text)";
cmd.Prepare();

cmd.Parameters.AddWithValue("@number", 1);
cmd.Parameters.AddWithValue("@text", "One");

for (int i=1; i <= 1000; i++)
{
    cmd.Parameters["@number"].Value = i;
    cmd.Parameters["@text"].Value = "A string value";

    cmd.ExecuteNonQuery();
}

처음에는 "ExecuteNonQuery"를 사용하지 않고 가짜 값으로 매개 변수를 추가한 다음 루프 안에서 실제 값을 추가합니다.

다음 링크 참조: https://dev.mysql.com/doc/connector-net/en/connector-net-programming-prepared-preparing.html

언급URL : https://stackoverflow.com/questions/652978/parameterized-query-for-mysql-with-c-sharp

반응형