1

私はms-sqlでこの手順を書きました

ALTER proc [dbo].[gravacliente]
AS
SELECT
    idcliente, Nome, Endere, tel_empresa, celular,
    UF, CEP, Email, Contato, Referencia, OBS, Nasc,
    cpf, cnpj, Iest
FROM
    tbcliente

そしてこのコードも

DataSet grava = new DataSet();
SqlDataAdapter da2 = new SqlDataAdapter();
SqlCommandBuilder constru6 = new SqlCommandBuilder(da2);
SqlCommand llena8 = new SqlCommand("gravacliente", conec1);
llena8.CommandType = CommandType.StoredProcedure;
da2.SelectCommand = llena8;
da2.Fill(grava, "tbcliente");
DataRow dr = grava.Tables["tbcliente"].NewRow();
dr.BeginEdit();
dr["nome"] = txtNome.Text;
dr["endere"] = txendere.Text; 
dr.EndEdit();
da2.Update(grava.Tables["tbcliente"]);
label9.Text = txtNome.Text;

conec1動作していますが、上記のコードは何も更新しません。エラーはどこにありますか?

4

2 に答える 2

1

まず、テーブルに行を追加する必要があります。

DataRow dr = grava.Tables["tbcliente"].NewRow();

dr["nome"] = txtNome.Text;
dr["endere"] = txendere.Text; 

grava.Tables["tbcliente"].AddRow(dr);

また、知る限り、ストアド プロシージャではSqlCommandBuilder機能しません。アダプターに更新コマンドを提供するか、テキストベースの選択コマンドを使用する必要があります。

SqlCommand llena8 = new SqlCommand("SELECT idcliente, Nome, Endere, tel_empresa, celular, UF, CEP, Email, Contato, Referencia, OBS, Nasc, cpf, cnpj, Iest FROM tbcliente", conec1);

もちろん、更新を行う前にこれを呼び出す必要もあります。

constru6.GetUpdateCommand();

SqlCommandBuilder追加のオーバーヘッドがかかるため、まったく使用しないことをお勧めします。ただし、どうしても使用したい場合は、ドキュメントを読むことをお勧めします。

于 2014-03-10T20:35:28.780 に答える