gpt4 book ai didi

c# - 更新命令在传递 DataRow 时需要有效的 insertCommand

转载 作者:行者123 更新时间:2023-11-29 12:21:44 35 4
gpt4 key购买 nike

我在执行以下代码时遇到问题。使用 Ngpsql 数据适配器。该函数采用数据表创建和更新查询

参数字符串值是动态生成的更新值,然后将其与局部变量字符串查询连接起来并创建一个查询,如UPDATE xyz SET ecode=@ecode,name=@name .....等等

public void TransactionRecording(DataTable DT, string values,bool update)
{
string Query = "";
NpgsqlDataAdapter NgAdapter = new NpgsqlDataAdapter();

if (update)
{
Query += "UPDATE Cards SET " + values;
NgAdapter.UpdateCommand = new NpgsqlCommand(Query, connection);
this.UpdateParameterSetForLocalToCentral(NgAdapter);

}
else
{
Query += "INSERT INTO Cards (ecode, ename, fname, address1, address2, address3, deo, employee, active, birth, type, company, Designation, photo, manual, visit_to, visit_name, vehicle, modifideby, registered, validity, tpl, serial, gateno, level, gate_in, gate_out) VALUES(" + values + ")";
NgAdapter.InsertCommand = new NpgsqlCommand(Query, connection);
this.InsertParameterSetForLocalToCentral(NgAdapter);
}


try {
NgAdapter.Update(DT); }catch(Exception ex)
{
MessageBox.Show(ex.Message);
}


}

public void UpdateParameterSetForLocalToCentral(NpgsqlDataAdapter NgAdapter)
{

foreach (string name in Enum.GetNames(typeof(LocalToCentralFields)))
{
switch (name)
{
case "ecode":
case "ename":
case "fname":
case "address1":
case "address2":
case "address3":
case "type":
case "company":
case "Designation":
case "visit_to":
case "visit_name":
case "vehicle":
case "modifideby":
case "serial":
case "gateno":
case "level":
case "gate_in":
case "gate_out":
NpParam = NgAdapter.UpdateCommand.Parameters.Add("@"+name,NpgsqlTypes.NpgsqlDbType.Varchar);
break;
case "deo":
case "employee":
case "active":
NpParam = NgAdapter.UpdateCommand.Parameters.Add("@" + name, NpgsqlTypes.NpgsqlDbType.Boolean);
break;
case "birth":
case "registered":
case "validity":
NpParam = NgAdapter.UpdateCommand.Parameters.Add("@" + name, NpgsqlTypes.NpgsqlDbType.Timestamp);
break;
case "photo":
case "tpl":
NpParam = NgAdapter.UpdateCommand.Parameters.Add("@" + name, NpgsqlTypes.NpgsqlDbType.Bytea);
break;

}
NpParam.SourceVersion = DataRowVersion.Original;
NpParam.SourceColumn = "ecode";

}

}

在传递 DataRow 时收到此错误更新命令需要有效的 InsertCommand,我正在更新行那么为什么要求插入命令请帮助

谢谢

最佳答案

当您调用 NgAdapter.Update 时,它会根据行的 rowState 为 DataTable 的每一行调用适当的命令。如果 rowState 被插入,它调用 InsertCommand,如果 rowState 被删除,它调用 DeleteCommand,所以你必须在你的 DataAdapter 中定义所有命令

关于c# - 更新命令在传递 DataRow 时需要有效的 insertCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18329201/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com