- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
好吧,我正在尝试对表执行简单的更新查询,但我一直收到此错误 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/
尽管 Jet/OLE DB 参数是相对的 well documented我无法理解这两个连接参数之间的区别: 第一个: Jet OLEDB:Transaction Commit Mode (DBPRO
此查询产生错误 No value given for one or more required parameters : using (var conn = new OleDbConnection("
当文件名有句点时,使用 OLEDB 读取 CSV 文件时出现问题。 我在 C# 中有一个代码,它使用 OleDBProvider 读取 CSV 文件。它适用于常规范式的文件名,例如 Budget.cs
自从我使用经典 ASP 和 Microsoft Access 进行一些编程以来,我们使用“Microsoft.Jet.Oledb”驱动程序来 Access 和显示数据已经很多年了。 我被要求做一些使用
我已经编译了来自运行 VS2007 ATL OLEDB Provider wizard 的示例 OleDb 提供程序代码.我在那篇博文中提供了更完整的细节。代码使 Excel 崩溃。 Sub Test
我正在尝试创建与位于 SharePoint 服务器上的 Excel 文件的 OleDb 连接。我正在玩的示例代码抛出 OleDb 异常“无效的互联网地址”: public static void Co
我得到以下异常 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine 虽然我已经安装了 'Microso
我正在使用 ASP 上的 OleDb 读取 excel 文件。网络(C#)。 所有信息都正常返回,我惊讶地发现,即使 Excel 文件中定义的单元格类型也返回到我的代码中。 问题是我有所有单元格“常规
有人有我可以在 Excel 的 CREATE TABLE 语句中使用的数据类型列表吗?我已经搜索过,但无法提出任何建议;至少不是任何官方的。从一个地方,我发现: CHAR(255) MEMO INT
我需要以编程方式检查 Excel 中多个 OLEDB 数据连接到 SQL 表和 View 的刷新日期。它们都以相同的方式配置并使用相同的连接字符串,我在 VBA 中使用以下命令检查它们: Connec
我正在编写一个 Web 应用程序,该应用程序将通过打开与经过身份验证的用户提交的 Excel 文件的 OLEDB 连接来读取数据。谁能告诉我以这种方式打开 Excel 文件的安全风险吗?我知道危险的宏
我们正在使用 ADO 访问 Oracle 10g 第 2 版,Oracle 10g 的 Oledb 提供程序。我们在连接池方面遇到了一些问题。数据库驻留在远程机器上,并且连接池正在发生。但是如果远程机
我管理一个导入 Excel 文档的旧应用程序。它已经运行了很长时间,但大约 6 个月前,它停止了工作。在断断续续地搜索错误几个月后,我终于发现我需要在 Exceldocument 中的工作表名称末尾添
我试图找到一种方法来保护查询字符串中的撇号。我有一个包含撇号的字符串格式的值,当我尝试插入时它抛出一个错误 例如: Insert into ["excelApp.worksheetsList.Elem
我有一个 C# 应用程序,它使用 OleDBConnection 连接到本地计算机上的命名 SQL Express 实例: _connection = new OleDbConnection(_str
目前我正在搜索连接字符串的属性,它可用于以只读模式连接到 Excel 文件。搜索 Google 得到了很多连接字符串的示例,但我似乎无法在 OleDb 连接字符串的“扩展属性”部分找到所有可能性的规范
我有一个 DataFlow 任务,应该提取大约 1800 万条记录,并在对它们执行一些任务后,将它们插入到另一个 OLEDB 目标中。 问题可以在下面的屏幕截图中看到。 我收到的错误如下: Infor
我有一个关于向命令(MySQL 或 OleDB,我目前使用这两者)添加参数以避免 SQL 注入(inject)的问题。 除了开放的注入(inject)漏洞之外,这个硬编码查询工作得绝对正常; var
我有一个使用 MySQL 数据库的 vb.net 程序。现在我将数据库更改为 Microsoft Access 2010。我更改了所有必要的设置,例如连接首选项、命令等。 问题是:我遇到了一个错误 m
我正在尝试找到一种方法来正确格式化从旧的 Visual Fox Pro 数据库加载数据的 SELECT 语句中的日期。我需要这样做,以便我可以将其加载到 CSV 中,然后将其加载到 MySQL 中,它
我是一名优秀的程序员,十分优秀!