gpt4 book ai didi

c# - OleDb - 关键字 'DEFAULT' 附近的语法不正确

转载 作者:太空宇宙 更新时间:2023-11-03 12:30:06 24 4
gpt4 key购买 nike

好吧,我正在尝试对表执行简单的更新查询,但我一直收到此错误 Incorrect syntax near the keyword 'DEFAULT'。事情是。只有当 ome 值为 NULL 时它才会出错,但我已经检查过它确实允许 null 值。这是我的查询代码

public void UpdateQuery(String[] valores) 
{
conexion = this.Connections.OLEDBCONNECTION.ConnectionString;
String query = " UPDATE [UTB_CUENTAS] SET CODTYP=ISNULL(?,CODTYP), CODORG=ISNULL(?,CODORG), CODGRP=ISNULL(?,CODGRP), TXTDEN=ISNULL(?,TXTDEN),"
+ " IDEACC=ISNULL(?,IDEACC), CODAPP=ISNULL(?,CODAPP), NUMPLZ=ISNULL(?,NUMPLZ), CODCUR=ISNULL(?,CODCUR), DATING=ISNULL(?,DATING),"
+ " NUMACCCTE=ISNULL(?,NUMACCCTE), DATCAN=ISNULL(?,DATCAN), FLGESTADO=ISNULL(?,FLGESTADO), DATELI=ISNULL(?,DATELI),"
+ " DATUPD=ISNULL(?,DATUPD), TXTADR=ISNULL(?,TXTADR), CODUSR=ISNULL(?,CODUSR)"
+ " WHERE NUMACC = ?";

using (OleDbConnection con = new OleDbConnection(conexion))
{
con.Open();
using (OleDbCommand cmd = con.CreateCommand())
{
cmd.Parameters.Add("@CODTYP", OleDbType.VarChar, 3).Value = valores[1];
cmd.Parameters.Add("@CODORG", OleDbType.VarChar, 18).Value = valores[2];
cmd.Parameters.Add("@CODGRP", OleDbType.VarChar, 4).Value = valores[3];
cmd.Parameters.Add("@TXTDEN", OleDbType.VarChar, 150).Value = valores[4];
cmd.Parameters.Add("@IDEACC", OleDbType.Char, 1).Value = valores[5];
cmd.Parameters.Add("@CODAPP", OleDbType.VarChar, 2).Value = valores[6];
cmd.Parameters.Add("@NUMPLZ", OleDbType.VarChar, 3).Value = valores[7];
cmd.Parameters.Add("@CODCUR", OleDbType.Char, 3).Value = valores[8];

if (valores[9] == null)
cmd.Parameters.Add("@DATING", OleDbType.DBTimeStamp).Value = DBNull.Value;
else
cmd.Parameters.Add("@DATING", OleDbType.DBTimeStamp).Value = Convert.ToDateTime(valores[9]);

cmd.Parameters.Add("@NUMACCCTE", OleDbType.VarChar, 18).Value = valores[10];

if (valores[11] == null)
cmd.Parameters.Add("@DATCAN", OleDbType.DBTimeStamp).Value = DBNull.Value;
else
cmd.Parameters.Add("@DATCAN", OleDbType.DBTimeStamp).Value = Convert.ToDateTime(valores[11]);

cmd.Parameters.Add("@FLGESTADO", OleDbType.Char, 1).Value = valores[12];

if (valores[13] == null)
cmd.Parameters.Add("@DATELI", OleDbType.DBTimeStamp).Value = DBNull.Value;
else
cmd.Parameters.Add("@DATELI", OleDbType.DBTimeStamp).Value = Convert.ToDateTime(valores[13]);

cmd.Parameters.Add("@DATUPD", OleDbType.DBTimeStamp).Value = Convert.ToDateTime(valores[14]);
cmd.Parameters.Add("@TXTADR", OleDbType.VarChar, 100).Value = valores[15];
cmd.Parameters.Add("@CODUSR", OleDbType.VarChar, 7).Value = valores[16];
cmd.Parameters.Add("@NUMACC", OleDbType.VarChar, 18).Value = valores[0];

cmd.CommandText = query;
try
{
cmd.ExecuteNonQuery();
}
catch (OleDbException ex)
{
byte[] emptybytes = new byte[0];

this.Log("CustomMessage: Error en NUMACC: " + valores[0] + " | " + ex.Message, 0, emptybytes);
}
cmd.Parameters.Clear();
}
con.Close();
}
}

我为日期时间列提供了“yyyy-MM-dd HH:mm:ss”格式。当我从 SQl Server Management Studio 执行此操作时它会起作用,仅此而已。现在,我知道 OLEDB 并不真正关心参数名称,它的工作顺序与查询中调用的顺序相同。这就是我这样做的原因。

我已经用

进行了测试
String query = " UPDATE [UTB_CUENTAS] SET CODTYP=ISNULL(?,CODTYP) WHERE NUMACC = ?" 

并且只使用第一个参数就可以了!但是使用第二个值 CODORG 会抛出错误。

在这种情况下,valores[2]valores[3] 是空值,但是由于我在查询,我相信这应该不是问题。即使是,该列也允许空值,但它不会更新

最佳答案

根据我的评论,null 和 DBNull.Value 是不同的东西。尝试

cmd.Parameters.Add("@CODORG", OleDbType.VarChar, 18).Value = valores[2] ?? (object)DBNull.Value;

关于c# - OleDb - 关键字 'DEFAULT' 附近的语法不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43100266/

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