문제

나는 이미 수행한 연구이고,비록 아래 질문과 비슷,이다,하지만 아무도를 해결하는 것 같이 내 문제입니다.

적절한 방법으로 데이터에 액세스는 데이터베이스

매개 변수를 사용하여 데이터를 삽입하는 데이터베이스에 액세스

점점에서 데이터 액세스를 텍스트 상자에서는 C#버튼을 클릭하여

업데이트에 대한 쿼리 데이터베이스에 액세스 작동하지 않는 C#.NET

전달하는 매개변수에 액세스하는 쿼리에서는 c#

매개 변수가 있는 쿼리를 삽입하는 값

여기에는 이 부분의 코드와 관련된:

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_ClicknameSearchButton_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 고 그것이 있어야 예상대로 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top