asp.net中的更新程序不起作用

时间:2014-01-02 18:48:01

标签: c# asp.net sql-server visual-studio-2010

这些程序有效,idcliente是表的ID列:

alter procedure  updatenome (@ixliente nvarchar(60))as
select idcliente,nome,endere,tel,celular,CIDADE,iest,cep,nasc from tbcliente
where idcliente like  @ixliente 

asp.net中的这些C#代码不会返回错误:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;     
string guid =  LblIDCliente.Text;

        if (conx.State != ConnectionState.Open)
        { conx.Open(); }

        SqlDataAdapter da2 = new SqlDataAdapter();
        DataSet dss = new DataSet();
        SqlCommandBuilder constru2 = new SqlCommandBuilder(da2);
        SqlParameter empi = new SqlParameter("@ixliente", SqlDbType.NVarChar);
        empi.Value = guid;
        SqlCommand llena = new SqlCommand("updatenome", conx);
        llena.CommandType = CommandType.StoredProcedure;
        llena.Parameters.Add(empi);
        da2.SelectCommand = llena;
        da2.Fill(dss, "cliente"); 
        DataRow nova = dss.Tables["cliente"].Rows[0];
        nova.BeginEdit();
        nova["nome"] = TxtNome.Text;
        nova.EndEdit();
        da2.Update(dss.Tables["cliente"]);

但是没有更新表tbcliente,行:

nova["nome"] = TxtNome.Text;

在txtnome.text中写入新值时,不要进行更改;如果我已经写了新值直接像这样

nova["nome"] = "street name";

程序工作问题是我犯了一些错误,事件不接受我在文本框中写的更改

3 个答案:

答案 0 :(得分:1)

如果您使用存储过程 SqlDataAdapter 来获取数据,那么您还必须专门编写存储过程以进行更新。

答案 1 :(得分:0)

只需更改以下行

da2.Fill(dss, "cliente"); 
DataRow nova = dss.Tables["cliente"].Rows[0];
nova.BeginEdit();
nova["nome"] = TxtNome.Text;
nova.EndEdit();
da2.Update(dss.Tables["cliente"]);

da2.Fill(dss); 
DataRow nova = dss.Tables[0][0];
nova.BeginEdit();
nova["nome"] = TxtNome.Text;
nova.EndEdit();
da2.Update(dss);

  da2.Fill(dss, "cliente"); 
  DataRow nova = dss.Tables["cliente"].Rows[0];
  nova.BeginEdit();
  nova["nome"] = TxtNome.Text;
  nova.EndEdit();
  da2.Update(dss.Tables["cliente"]);    
  nova.AcceptChanges();
  nova.SetModified();// Must call this lines

  

只需首先使用更新程序更新表格,然后从表格中获取数据。

更多详细信息请参阅:http://msdn.microsoft.com/en-us/library/33y2221y.aspx

答案 2 :(得分:0)

在调用Update

之前添加这些行
da2.InsertCommand = constru2.GetInsertCommand();
da2.UpdateCommand = constru2.GetUpdateCommand();
da2.DeleteCommand = constru2.GetDeleteCommand();
da2.Update(dss.Tables["cliente"]);

现在,DataAdapter具有正确的命令构建,可以更新已更改的行 当然,这仅适用于您的表定义了主键的情况。

我也同意Hans Kesting。使用适当的名称为您的存储过程 如果你看一个名为updatesomething的程序,你对它的内部工作有什么看法?