2015-01-23 1 views
0

vb.NET에서 긴 MySQL 명령을 보내려고했습니다. MySQL 명령 문자열의 일부로 변수를 사용하려면 "&"을 사용하여 문자열을 연결했습니다.vb.NET "{0}"연결은 MySQL 명령에서는 작동하지 않지만 "&"는

이 작동하지만, 내 코드가 지저분 해 보이게, 그래서 나는 "{0}, {1}"등

이 그러나 작동하지 않습니다 사용하여 시도와 나는 오류 얻을 :

Overload resolution failed because no accessible 'New' accepts this number of arguments.

예 :

connector.Open() 
commander = New MySqlCommand("UPDATE 'pupil_data' SET '" & Question & "'='" & Answer & "' WHERE 'username'=" & Environment.UserName & ";", connector) 
dataAdapter = New MySqlDataAdapter(commander) 
connector.Close() 

이것은 그러나, 작동 :

connector.Open() 
commander = New MySqlCommand(("UPDATE 'pupil_data' SET '{0}'='{1}' WHERE 'username'='{2}'", Question, Answer, Environment.Username), connector) 
dataAdapter = New MySqlDataAdapter(commander) 
connector.Close() 

작동하지 않습니다. 내 브라케팅에 문제가 될 수 있지만 여러 가지 조합을 시도했으며 논리적으로는 소리가났습니다 (제 생각에는).

+0

문자열은 자동으로 형식 마스크를 사용하지 않습니다. 당신은'String.Format ("UPDATE pupil_data ...", arg1, arg2 ...)'마스크를 사용하고 결과를 얻기위한 args를 사용해야한다. 그것을 새 SQLCommand 안에 넣거나 temp var에 문자열을 만들고 전달하십시오 – Plutonix

+0

마스크로 무엇을 의미하는지 잘 모르겠습니다. 당신은 명확히 할 수 있습니까? – 08robertsj

+0

이것은 90 명 파티가 아닙니다. 오늘 * (어제) * 준비/매개 변수화 된 문 사용 : [매개 변수화 된 SQL 쿼리는 어떻게 작성합니까? 왜해야합니까?] (http://stackoverflow.com/questions/542510/how-do-i-create-a-parameterized-sql-query-why-should-i/542542#comment44610013_542542). –

답변

0

"{n}"지정은 자동 연결을 나타내지 않지만 String.Format의 일부로 사용되는 서식 지정 자리 표시 자입니다. 자리 표시자를 사용하지 않는 문자열은 자동으로 무엇을해야할지 알 수 있습니다. MySQLCommand 개체는 확실히이 개체를 사용하는 방법을 모르기 때문에 오류가 발생합니다. 예 :

connector.Open() 
Dim SQL As String = String.Format("UPDATE pupil_data SET '{0}'='{1}' WHERE 'username'='{2}'", 
     Question, Answer, Environment.Username) 
commander = New MySqlCommand(SQL, connector) 
dataAdapter = New MySqlDataAdapter(commander) 
connector.Close() 

SQL에서 모든 눈금이 필요한지 잘 모르겠습니다. Question 같은이 숫자 인 경우, 당신은 문자열로 변환해야합니다 : 자동으로이를 구현 Console.WriteLine, StringBuilder.AppendFormat 같은 몇 가지가 있습니다

Dim SQL As String = String.Format("Update ...", 
     Question.ToString, Answer.ToString, Environment.Username) 

.

은 SQL을 만들 수있는 잘못된 방법이 절대적이라고 String.Format

참고를 참조하십시오. 예를 들어 사용자 이름이 D'Artagnan 인 경우 쿼리가 중단됩니다. String.Format은 문자열을 연결하는 것보다 SQL 삽입에서 보호하지 않습니다.

관련 문제