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
'programing' 카테고리의 다른 글
Spring Security 및 @Async(인증된 사용자 혼합) (0) | 2023.11.07 |
---|---|
사용자 입력을 허용하지 않는 텍스트 입력이 있는 jQuery Datepicker (0) | 2023.11.02 |
scanf와 scanf_s의 차이 (0) | 2023.11.02 |
MySQL 데이터베이스에 255 char 이상 저장하는 방법? (0) | 2023.11.02 |
C#에서 XML 파일을 읽고 구문 분석하려면 어떻게 해야 합니까? (0) | 2023.11.02 |