【问题标题】:Update access db from textbox value从文本框值更新访问数据库
【发布时间】:2010-10-03 14:23:26
【问题描述】:

我是 c# 和 asp.net 世界的新手! 我有个问题。 在访问数据库中,我有 2 个表( book、loan )具有参照完整性约束( book.ID = loan.ID )。

在我的项目中,我有一些文本框,当我更改文本框的值时,我必须更新表格。

protected void Button1_Click(object sender, EventArgs e)
{
    cod = Request["cod"];

    //Componiamo la stringa di interrogazione al database relativa alla tabella b_prestiti
    qry = "UPDATE b_libri SET codice='" + TextBox1.Text + "' WHERE codice='" + cod + "'";
    string qry2 = "SELECT codice_libro FROM b_prestiti WHERE codice_libro='" + cod + "'";
    string qry3 = "UPDATE b_prestiti SET codice_libro='"+ TextBox1.Text + "' WHERE codice_libro='" + cod + "'";
    string qry4 = "UPDATE b_libri SET titolo='" + TextBox2.Text + "' WHERE codice='" + cod + "'";
    string qry5 = "UPDATE b_libri SET autore='" + TextBox3.Text + "' WHERE codice='" + cod + "'";
    string qry6 = "UPDATE b_libri SET editore='" + TextBox4.Text + "' WHERE codice='" + cod + "'";

    //Creiamo gli oggetti di tipo OleDbConnection
    //passando la stringa di connessione al costruttore
    conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
    OleDbConnection conn2 = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
    OleDbConnection conn3 = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

    //Inizializziamo gli oggetti di tipo OleDbCommand
    cmd = conn.CreateCommand();
    OleDbCommand cmd2 = conn2.CreateCommand();
    OleDbCommand cmd3 = conn3.CreateCommand();

    OleDbDataReader reader2 = null;
    //OleDbDataReader reader3 = null;

    //Apriamo la connessione
    conn.Open();
    conn2.Open(); 
    conn3.Open();
   /* 
    cmd2.CommandText = qry2;
    reader2 = cmd2.ExecuteReader();*/

    if (MessageBox.Show("Sei sicuro di voler aggiornare questo libro?", "Confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes)
        {
            if (!first_titolo.Equals(TextBox2.Text) || !first_autore.Equals(TextBox3.Text) || !first_editore.Equals(TextBox4.Text))
            {
              /*  while (reader2.Read())
                {
                    if (reader2["codice_libro"] != "")
                    {
                        if (MessageBox.Show("VINCOLI REFERENZIALI! Vuoi aggiornare comunque?", "Confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            cmd3.CommandText = qry3;
                            reader3 = cmd3.ExecuteReader();
                            reader3.Close();

                            MessageBox.Show("Vincolo Aggiornato!");
                        }
                        else Response.Redirect("Default.aspx");
                    }

                }*/
                /*cmd.CommandText = qry;
                reader = cmd.ExecuteReader();
                reader.Close();*/
                MessageBox.Show("aggiornato!");
            }
            else MessageBox.Show("no");
          /* 

            if (first_titolo != TextBox2.Text)
            {
                cmd.CommandText = qry4;
                reader = cmd.ExecuteReader();
                reader.Close();
                MessageBox.Show("Aggiornato!");
            }

            if (first_autore != TextBox3.Text)
            {
                cmd.CommandText = qry5;
                reader = cmd.ExecuteReader();
                reader.Close();
                MessageBox.Show("Aggiornato!");
            }

            if (first_editore != TextBox4.Text)
            {
                cmd.CommandText = qry6;
                reader = cmd.ExecuteReader();
                reader.Close();
                MessageBox.Show("Aggiornato!");
            }

        */

        }
        //else Response.Redirect("Default.aspx");


//    reader2.Close();

    //Chiudiamo la connessione
    conn.Close();
    conn2.Close();
    conn3.Close();

}  

我不知道怎么做!请帮帮我!

【问题讨论】:

  • 请删除不必要的,注释掉的代码

标签: c# asp.net


【解决方案1】:

对我来说很难理解非英语,但我建议这是您可以做出的一项改进:

   string qry = "UPDATE b_libri "
                   "SET titolo='" + TextBox2.Text + "', "
                   "SET autore='" + TextBox3.Text + "', "
                   "SET editore='"+ TextBox4.Text + "' " 
                " WHERE codice='" + cod + "'";

为了帮助解决其他问题,请为我们发布您的表创建和约束创建代码。然后我们将能够帮助解决这些问题。

【讨论】:

  • 您只需要一条评论。请使用您更新的信息更改原始问题。不要发布答案。
【解决方案2】:

我没有使用 OLE 连接的经验,但原则上是:

OleDBCommand cmd = conn.CreateCommand( qry3 );

if ( cmd.ExecuteNonQuery() > 0 )
{
  // at least one row updated
  //everything is ok
}
else
{
  something went wrong
}

使用 ExecuteNonQuery,它将执行一个不是 SELECT 的 sql 语句并返回受影响的行。

另外,不需要多个连接,一个就够了,可以在一个连接上执行多个命令。

也可以回答霍根的回答! 编辑:根据霍根的建议改变了比较和评论

马里奥

【讨论】:

  • hmmm... ExecuteNonQuery() 不会返回受影响的行数。 1 怎么总是正确答案?不确定这是一个很棒的模板。
【解决方案3】:

我解决了文本框的不同值。 现在我有 2 个表,我应该检查,当我更改 Codice(Id) 的值时,是否有 参照完整性约束。

// Aggiorna
    protected void Button1_Click(object sender, EventArgs e)
    {
        cod = Request["cod"];

        //Componiamo la stringa di interrogazione al database relativa alla tabella b_prestiti
        qry = "UPDATE b_libri SET codice='" + TextBox1.Text + "' WHERE codice='" + cod + "'";
        string qry2 = "SELECT codice_libro FROM b_prestiti WHERE codice_libro='" + cod + "'";
        string qry3 = "UPDATE b_prestiti SET codice_libro='" + TextBox1.Text + "' WHERE codice_libro='" + cod + "'";
        string qry4 = "UPDATE b_libri SET titolo='" + TextBox2.Text + "' WHERE codice='" + cod + "'";
        string qry5 = "UPDATE b_libri SET autore='" + TextBox3.Text + "' WHERE codice='" + cod + "'";
        string qry6 = "UPDATE b_libri SET editore='" + TextBox4.Text + "' WHERE codice='" + cod + "'";

        //Creiamo gli oggetti di tipo OleDbConnection
        //passando la stringa di connessione al costruttore
        conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        OleDbConnection conn2 = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        OleDbConnection conn3 = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

        //Inizializziamo gli oggetti di tipo OleDbCommand
        cmd = conn.CreateCommand();
        OleDbCommand cmd2 = conn2.CreateCommand();
        OleDbCommand cmd3 = conn3.CreateCommand();

        OleDbDataReader reader2 = null;
        OleDbDataReader reader3 = null;

        //Apriamo la connessione
        conn.Open();
        conn2.Open();
        conn3.Open();

        cmd2.CommandText = qry2;
        reader2 = cmd2.ExecuteReader();

        if (changed)
        {
            if (MessageBox.Show("Sei sicuro di voler aggiornare questo libro?", "Confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                if (first_titolo != TextBox2.Text)
                {
                    cmd.CommandText = qry4;
                    reader = cmd.ExecuteReader();
                    reader.Close();
                    MessageBox.Show("Titolo Aggiornato!");
                }

                if (first_autore != TextBox3.Text)
                {
                    cmd.CommandText = qry5;
                    reader = cmd.ExecuteReader();
                    reader.Close();
                    MessageBox.Show("Autore Aggiornato!");
                }

                if (first_editore != TextBox4.Text)
                {
                    cmd.CommandText = qry6;
                    reader = cmd.ExecuteReader();
                    reader.Close();
                    MessageBox.Show("Editore Aggiornato!");
                }
                if (first_codice != TextBox1.Text)
                {
                    while (reader2.Read())
                    {
                       if (reader2["codice_libro"] != "")
                       {
                            if (MessageBox.Show("VINCOLI REFERENZIALI! Vuoi aggiornare comunque?", "Confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes)
                            {

                                //reader3.Close();
                                cmd.CommandText = qry;
                                cmd3.CommandText = qry3;
                                reader3 = cmd3.ExecuteReader();
                                reader = cmd.ExecuteReader();


                               // reader.Close();
                                MessageBox.Show("Vincolo Aggiornato!");
                            }
                            else Response.Redirect("Default.aspx");
                       }
                       else 
                       {
                            cmd3.CommandText = qry3;
                            reader3 = cmd3.ExecuteReader();
                           reader3.Close();
                            Response.Redirect("Default.aspx");
                        }
                    }

                    cmd.CommandText = qry;
                    reader = cmd.ExecuteReader();
                    reader.Close();
                    MessageBox.Show("Codice Aggiornato!");
                    reader.Close();
                  //  reader3.Close();
                    conn.Close();
                    conn2.Close();
                    conn3.Close();
                    Response.Redirect("Default.aspx");
                }
            }
            else Response.Redirect("Default.aspx");
        }
        else Response.Redirect("Default.aspx");
    }

问题仅出在 (fist_codice != Textbox1.Text) 时。 first_codice 是最初文本框的值; Textbox1.Text 是 textbox1 中的实际值。 谢谢

【讨论】:

  • 这没有帮助。如果您想更改您的问题,请这样做——添加答案是使用本网站的错误方式。改变原来的问题。还包括定义表的 SQL,以便我们帮助解释您遇到的问题。没有它,就无法知道发生了什么。 C# 对 SQL 问题毫无用处。
猜你喜欢
  • 2021-03-23
  • 2013-02-01
  • 2011-02-13
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
相关资源
最近更新 更多