проблема обновления данных в сетевом представлении через обновление запроса в базе данных Access 2007? - PullRequest
1 голос
/ 09 октября 2010

В другой раз, когда мне нужна ваша помощь, я разрабатываю приложение на C # с использованием базы данных Access (2007), проблема, я думаю, заключается в обновлении запроса, я искал по интернету, но ничего не работает, у меня есть сетка данных и он имеет3 столбца, которые пользователь должен поместить в последние 2 столбца (5 строк), я уже делаю это, но когда я заполняю столбцы в представлении данных, он сохраняет данные в базе данных.Поэтому, пожалуйста, мне нужна ваша помощь, это мой код, помощь очень ценится: D

private void btnGuardar_Click(object sender, EventArgs e)
    {

        //using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Databsename.accdb"))
        //{

        OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Databasename.accdb;Persist Security Info=false");


        int grade = 1;
        string x;
        string comment;

            for (int i = 0; i < this.dataGridView4.Rows.Count-1; i++)
            {

                x = dataGridView4.Rows[i].Cells[1].Value.ToString();
                //Console.WriteLine(x);
                MessageBox.Show(x);

                grade = int.Parse(x);


                comment = dataGridView4.Rows[i].Cells[2].Value.ToString();
                MessageBox.Show(comment);

                OleDbCommand cmd = new OleDbCommand("Update archievemnet set grade= @GRADE comment=@COMMENT WHERE idLine =1  ", conn);

                cmd.Parameters.Add(new OleDbParameter("@GRADE", OleDbType.Integer));
                cmd.Parameters["@GRADE"].Value = grade;

                cmd.Parameters.Add(new OleDbParameter("@comment", OleDbType.VarChar));
                cmd.Parameters["@COMMENT"].Value = comment;

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
            }



        //}



    }

Ответы [ 3 ]

1 голос
/ 10 октября 2010

Вашему выражению UPDATE нужна запятая перед comment =

Посмотрите на этот пример, который работает в моей системе:

UPDATE tblFoo AS f SET f.parent_id = 99, f.foo_text = "updated"
WHERE (((f.id)=10));

без запятой после 99 ...:

UPDATE tblFoo AS f SET f.parent_id = 99 f.foo_text = "updated"
WHERE (((f.id)=10));

... Access жалуется:

Syntax error (missing operator) in query expression '99 f.foo_text = "updated"'.

0 голосов
/ 09 октября 2010

В вашем коде у вас есть "Обновить archievemnet ...".Возможно, это название вашего стола, но правильное английское слово - «Достижение».Проверьте правильность написания имени таблицы.Вы также должны иметь блок try / catch вокруг вашего кода, чтобы перехватывать любые исключения, генерируемые Access или коннекторами db, и некоторые записи в блоке исключений.(Я использую и рекомендую NLog.) Вы говорите, что получаете исключение, какой это тип и какое сообщение?

Я думаю, что вам лучше использовать параметры в конечном коде (как вы начали делать)вместо конкатенации строк, как рекомендует yonan2236, но иногда это может помочь при отладке.Вы можете попробовать:

    String updateStmt = "UPDATE archievemnet SET " + 
        " grade = " + grade +
        " comment = '" + comment + "' WHERE idLine = "+ idLine;
    OleDbCommand cmd = new OleDbCommand(updateStmt, conn);

и остановить код в отладчике непосредственно перед созданием команды.Скопируйте значение updateStmt в Access и посмотрите, можете ли вы выполнить инструкцию напрямую.

0 голосов
/ 09 октября 2010

Это не лучшее решение, но вы можете попробовать указать значения непосредственно в запросе.

OleDbCommand cmd = new OleDbCommand("UPDATE archievemnet SET " + 
" grade = " + textBoxGrade.Text +
" comment = " + textBoxComment.Text +
" WHERE idLine = 1  ", conn);

cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();

РЕДАКТИРОВАТЬ:

OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Databasename.accdb;Persist Security Info=false");

int idLine;
double grade;
string comment;

for (int i = 0; i < this.dataGridView4.Rows.Count-1; i++)
{    
    idLine  = Convert.ToInt32(dataGridView4[0, i].Value);
    grade = Convert.ToDouble(dataGridView4[1, i].Value);
    comment = Convert.ToString(dataGridView4[2, i].Value);

    OleDbCommand cmd = new OleDbCommand("UPDATE archievemnet SET " + 
    " grade = " + grade +
    " comment = '" + comment + "' WHERE idLine = "+ idLine, conn);

    cmd.Connection.Open();
    cmd.ExecuteNonQuery();
    cmd.Connection.Close();
}
...