MySQL 데이터베이스 연결을 사용하는 C# 프로그램에서이 이상한 AccessViolationException이 발생합니다. 필자는 데이터베이스의 값을 사용하여 텍스트 상자에 대한 자동 고침 기능을 생성합니다. 여기 코드는 다음과 같습니다AccessViolationException?
private void textBoxName_TextChanged(object sender, EventArgs e)
{
AutoCompleteStringCollection asc = Database.getSuggestedNames(textBoxName.Text);
if (asc != null)
textBoxName.AutoCompleteCustomSource = asc;
}
다음과 같이 getSuggestedNames (String) 메소드가 Database.cs에서 구현됩니다
실제 쿼리에 getValues라는 동일한 파일에 별도의 방법으로 이루어집니다public static AutoCompleteStringCollection getSuggestedNames(string namepart)
{
string query = "SELECT name FROM worker WHERE name LIKE '%"+namepart+"%';";
string[] namecolumn = { "name" };
List<string>[] names = getValues(query,namecolumn);
AutoCompleteStringCollection namec = new AutoCompleteStringCollection();
for (int i = 0; i < names[0].Count; i++)
namec.Add(names[0][i]);
return namec;
}
:
private static List<string>[] getValues(string query,string[] columnNames)
{
if (connection == null)
initialize();
if (connection.State == ConnectionState.Closed)
connection.Open();
MySqlCommand cmd = new MySqlCommand(query, connection);
MySqlDataReader dataReader = cmd.ExecuteReader();
List<string>[] list = new List<string>[columnNames.Length];
for (int i = 0; i < columnNames.Length; i++)
list[i] = new List<string>();
while (dataReader.Read())
{
for(int i=0;i<columnNames.Length;i++)
list[i].Add(dataReader[columnNames[i]] + "");
}
dataReader.Close();
connection.Close();
return list;
}
예외는 항상 사용자가 텍스트 상자 textBoxName에 데이터를 입력 할 때 발생합니다. 오류가 자주 발생하지 않으며 호출 스택에 문제를 일으키는 외부 코드가 표시됩니다. 그래서 문제가되는 것이 MySQL이라고 가정합니다.
내가 할 수있는 일이 없기 때문에 누군가이 문제를 극복하도록 도와 줄 수 있습니까?
디버깅에별로 도움이되지 않는 다음 코드에서 오류가 발생하는 정확한 줄은 17 줄입니다. Visual Studio는 다른 어떤 장소도 보여주지 않습니다. 스택 추적에 [외부 코드]가 표시됩니다. 하지만 어쨌든 여기에 있습니다 :
1 using System;
2 using System.Collections.Generic;
3 using System.Windows.Forms;
4
5 namespace LabourManagement
6 {
7 static class ManagementProgram
8 {
9 /// <summary>
10 /// The main entry point for the application.
11 /// </summary>
12 [STAThread]
13 static void Main()
14 {
15 Application.EnableVisualStyles();
16 Application.SetCompatibleTextRenderingDefault(false);
17 Application.Run(new General());
18
19 }
20 }
21 }
예외가 던져지는 정확한 위치 (코드의 어느 줄)를 게시하십시오 ... – wasyl
나는 MySqlDataReader를 사용한 적이 없지만 SQL과 ODBC를 사용했습니다. 나는 당신의 문제가 list [i] .Add (dataReader [columnNames [i]] + "")에 상당히 긍정적이라고 생각합니다. 문자열을 사용하여 항목을 검색하면 datareader는 결과를 Object로 반환합니다. 추가하기 전에 Object를 string으로 변환하거나 적절한 해당 열 유형으로 변환해야 할 수 있습니다. – Josh
수 없습니다. 이 getValue() 메서드를 통해 내 프로그램 전체에서 데이터를 검색하는 제네릭 메서드로 사용합니다. 이 텍스트 상자에 문자가 입력 된 경우를 제외하고는이 문제가 발생하지 않습니다. 어쨌든 고마워. – PPGoodMan