C#Access 쿼리지 않는 그것의 일을
-
21-12-2019 - |
문제
나는 이미 수행한 연구이고,비록 아래 질문과 비슷,이다,하지만 아무도를 해결하는 것 같이 내 문제입니다.
매개 변수를 사용하여 데이터를 삽입하는 데이터베이스에 액세스
점점에서 데이터 액세스를 텍스트 상자에서는 C#버튼을 클릭하여
업데이트에 대한 쿼리 데이터베이스에 액세스 작동하지 않는 C#.NET
여기에는 이 부분의 코드와 관련된:
private void LoadDetails(int index)
{
try
{
connection.Open();
command = new OleDbCommand("SELECT * from tagsTbl WHERE ID=@1", connection);
command.Parameters.AddWithValue("@1", index);
reader = command.ExecuteReader();
while (reader.Read())
{
nameTextBox.Text = reader["leName"].ToString();
altTextBox.Text = reader["altName"].ToString();
unitTextBox.Text = reader["currUnit"].ToString();
tagTextBox.Text = reader["currTag"].ToString();
oldTextBox.Text = reader["oldTag"].ToString();
descTextBox.Text = reader["currDesc"].ToString();
}
connection.Close();
}
catch
{
connection.Close();
MessageBox.Show(errortxt);
Application.Exit();
}
}
private void testWin_Load(object sender, EventArgs e)
{
loadFileDialog.ShowDialog();
connection = new OleDbConnection(strConn);
if (!blnLoaded)
Application.Exit();
else
{
errortxt = "Attempt to establish connection to database failed!";
LoadDetails(testInt);
this.Show();
}
}
private void loadFileDialog_FileOk(object sender, CancelEventArgs e)
{
strConnPath = loadFileDialog.FileName;
strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strConnPath;
blnLoaded = true;
}
private void prevButton_Click(object sender, EventArgs e)
{
if (testInt > 1)
testInt--;
LoadDetails(testInt);
gotoNumericUpDown.Value = testInt;
}
private void nextButton_Click(object sender, EventArgs e)
{
testInt++;
errortxt = "You cannot go higher than that!";
try
{
LoadDetails(testInt);
gotoNumericUpDown.Value = testInt;
}
catch
{
testInt--;
}
}
private void gotoButton_Click(object sender, EventArgs e)
{
try
{
testInt = (int)gotoNumericUpDown.Value;
LoadDetails(testInt);
}
catch
{
}
}
private void nameSearchButton_Click(object sender, EventArgs e)
{
try
{
connection.Open();
command = new OleDbCommand("SELECT * from tagsTbl WHERE leName='@name'", connection);
command.CommandType = CommandType.Text;
command.Parameters.AddWithValue("@name", namesTextBox.Text);
reader = command.ExecuteReader();
while (reader.Read())
{
nameTextBox.Text = reader["leName"].ToString();
altTextBox.Text = reader["altName"].ToString();
unitTextBox.Text = reader["currUnit"].ToString();
tagTextBox.Text = reader["currTag"].ToString();
oldTextBox.Text = reader["oldTag"].ToString();
descTextBox.Text = reader["currDesc"].ToString();
}
connection.Close();
}
catch
{
connection.Close();
}
}
private void tagSearchButton_Click(object sender, EventArgs e)
{
try
{
command = new OleDbCommand("SELECT * from tagsTbl WHERE currTag='@1'", connection);
command.Parameters.AddWithValue("@1", tagsTextBox.Text);
connection.Open();
MessageBox.Show(command.CommandText);
reader = command.ExecuteReader();
while (reader.Read())
{
nameTextBox.Text = reader["leName"].ToString();
altTextBox.Text = reader["altName"].ToString();
unitTextBox.Text = reader["currUnit"].ToString();
tagTextBox.Text = reader["currTag"].ToString();
oldTextBox.Text = reader["oldTag"].ToString();
descTextBox.Text = reader["currDesc"].ToString();
}
connection.Close();
}
catch
{
connection.Close();
}
}
나는 선언은 다음과 같은 클래스의 변수에 따라:
private string strConnPath = "";
private string strConn = "";
private bool blnLoaded = false;
OleDbConnection connection;
OleDbDataReader reader;
OleDbCommand command;
private string errortxt = "";
int testInt = 1;
이것은 현재 상황:
문제 코드에서 LoadDetails() 잘 작동하고,그에 따라 실행할 양식 로드.는 코드를 사용할 수 있습니다 또 다시 지금과 같은 문제없이,하지만을 실행하려고 할 때 다른 쿼리,그들은"fail".지 않으로서 실패하는 크게 던지는 예외지만,오히려, 쿼리 나를 사용하여 그 지역 내에서 (tagSearchButton_Click 고 nameSearchButton_Click), 지 않을 바꾸 매개 변수입니다.
이것은 나 혼란 때문에,그것은 무엇을 해야에서 LoadDetails() 방법입니다.면 나는 수동으로 변경 명령은 텍스트의 디버깅하는 동안,교체하여 매개변수를 수동으로 값,그 프로그램으로 작동하고,반환에 의해 반환되는 값을 사용하여 문입니다.
원인 OleDbCommand.매개 변수입니다.AddWithValue 기능이 정상적으로 작동하지 않습?
더 많은 정보:
예를 들어,사용이 라인:
command = new OleDbCommand("SELECT * from tagsTbl WHERE leName='@name'", connection);
따라서 그것은 줄 것이라고 명령이 문자열을 위해 지금:
SELECT*from tagsTbl 는 파일 이름='@이름'
무엇을 매개 변수가 있는 쿼리를 해야 하는지를 변경하는 것입 @이름 무 namesTextBox, 아래와 같:
command.Parameters.AddWithValue("@name", namesTextBox.Text);
말하자 나는 텍스트의 입력 값을"Jane_Smith".따라서 그것을 변경하는 명령:
SELECT*from tagsTbl 는 파일 이름='Jane_Smith'
하지만 그 대신 아무것도하지 않는다,그래서 명령은 여전히:
SELECT*from tagsTbl 는 파일 이름='@이름'
아마도 다른 관련된 정보:
저는 그냥 읽 이 질문, 지만,그것은 문제 내가 직면하고있다.내가 사용하고 Microsoft Access2013.나는 선택을 사용하 MS 에 대한 액세스 데이터베이스 내 프로그램의 관점에서 사실 그것은 쉽게 실행하는"standalone",클라이언트 요구를 설치에 무료로 액세스는 데이터베이스 엔진,하지 않는 경우가 있 MS Office 설치됩니다.이 프로그램으로 오프라인으로 작동합니다.
문제 해결사 Rumit Parakhiya!(난이도 배운 MySQL 쿼리 형식이며 문자열을 쿼리에 대한 형식 MS 액세스 너무 다릅니다.내가 사용하여 MySQL 쿼리 형식으로 구입할 수 있습니다)
해결책
당신이 필요하지 않을 넣 '
(작은 따옴표)의 주위에 이름에서 매개 변수를 검색합니다.지정,CLR 고려로 문자열입니다.만 제거하는 사람들 주위에 따옴표 @name
고 그것이 있어야 예상대로 작동합니다.