这些程序有效,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";
程序工作问题是我犯了一些错误,事件不接受我在文本框中写的更改
答案 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
的程序,你对它的内部工作有什么看法?