不改变OLEDB数据更新命令 [英] OleDB update command not changing data

查看:105
本文介绍了不改变OLEDB数据更新命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的Microsoft Access文件数据库。我有一个 SELECT 插入查询没有问题,但是当我尝试更新,在数据库记录不改变。

下面是code我用它来运行更新。有在调试日志中没有异常或错误。

CNN =新的OleDbConnection(connetionString);    OleDbCommand的命令=新的OleDbCommand(UPDATE [Wpisy] SET [WPIS] = @ WPIS,[id_kat] = @ id_kat,[tytul] = @ tytul WHERE [ID] = @ id_wpis,美国有线电视新闻网)
    command.Parameters.Add(新OleDbParameter(@ WPIS,tresc_wpisu.Text));
    command.Parameters.Add(新OleDbParameter(@ id_kat,lista_kategorii.SelectedValue));
    command.Parameters.Add(新OleDbParameter(@ tytul,tytul_wpisu.Text));
    command.Parameters.Add(新OleDbParameter(@ id_wpis,请求[ID]的ToString()));
    command.Connection = CNN;    尝试
    {
        如果(cnn.State.ToString()!=打开)
        cnn.Open();
        command.ExecuteNonQuery();
        cnn.Close();
    }
    赶上(OleDbException前)
    {
        Response.Clear();
        的Response.Write(除息);
        到Response.End();
    }


解决方案

我可能是错的,但我记得,OLEDB不允许命名的参数,而是使用?作为占位,参数需要,因为它们出现在SQL语句中以相同的顺序加入。如

 字符串即updateSQL =UPDATE [Wpisy] SET [WPIS] = ?, [id_kat] = ?, [tytul] = WHERE [ID] =?;command.Parameters.Add(新OleDbParameter(parm_wpis,OleDbType.VarChar,obj.tresc_wpisu));
command.Parameters.Add(新OleDbParameter(parm_id_kat,OleDbType.VarChar,obj.lista_kategorii))​​;
command.Parameters.Add(新OleDbParameter(parm_tytul,OleDbType.VarChar,obj.tytul_wpisu));
command.Parameters.Add(新OleDbParameter(parm_id_wpis,OleDbType.Integer,obj.id.ToString()));

命名的参数只是为了澄清知道哪个是哪个。另一个问题可能是,你命名的同名的参数被更新的列,这可能是这个问题几乎像一个恒定的...

集合X = X,而不是现在设置X = parmX ......没有歧义的要设置该参数值被应用。但总体而言,我认为它会通过使用工作?作为参数占位

I'm using Microsoft Access file as database. I have no problem with SELECT and INSERT queries but when I try to UPDATE, record in database does not change.

Below is the code I use to run update. There are no exceptions or errors in debug log.

    cnn = new OleDbConnection(connetionString);

    OleDbCommand command = new OleDbCommand("UPDATE [Wpisy] SET [wpis]=@wpis, [id_kat]=@id_kat, [tytul]=@tytul WHERE [ID]=@id_wpis" , cnn);
    command.Parameters.Add(new OleDbParameter("@wpis", tresc_wpisu.Text));
    command.Parameters.Add(new OleDbParameter("@id_kat", lista_kategorii.SelectedValue));
    command.Parameters.Add(new OleDbParameter("@tytul", tytul_wpisu.Text));
    command.Parameters.Add(new OleDbParameter("@id_wpis", Request["id"].ToString() ));
    command.Connection = cnn;

    try
    {
        if(cnn.State.ToString() != "Open")
        cnn.Open();
        command.ExecuteNonQuery();
        cnn.Close();
    }
    catch (OleDbException ex)
    {
        Response.Clear();
        Response.Write(ex);
        Response.End();
    }

解决方案

I could be wrong, but from what I remember, OleDB doesn't allow named parameters, but instead use "?" as a place-holder, and the parameters need to be added in the same sequence as they appear in the SQL statement. such as

String updateSql = "UPDATE [Wpisy] SET [wpis]=?, [id_kat]=?, [tytul]=? WHERE [ID]=?";

command.Parameters.Add(new OleDbParameter("parm_wpis", OleDbType.VarChar, obj.tresc_wpisu));
command.Parameters.Add(new OleDbParameter("parm_id_kat", OleDbType.VarChar, obj.lista_kategorii));
command.Parameters.Add(new OleDbParameter("parm_tytul", OleDbType.VarChar, obj.tytul_wpisu));
command.Parameters.Add(new OleDbParameter("parm_id_wpis", OleDbType.Integer, obj.id.ToString())); 

Naming the parameters is just for clarification to know which is which. One other issue might be that you named the parameters by the same name as the column being updated, and that may have been the issue almost like a constant...

set X = X instead of now set X = parmX... there is no ambiguity the you are setting to the PARAMETER value being applied. But overall, I do think it will work via using "?" as the parameter place-holder.

这篇关于不改变OLEDB数据更新命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆