本文介绍了与域聚合函数C#参数化查询(DMIN)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用下面的SQL语句的小C#应用程序。



SQL语句运行在Access 2013完美。



INSERT INTO adressed_to(对话,听众)
值(
DMIN(ID,人物,char_name ='李四'AND用的名字='约翰'),
DMIN(ID,对话,喇叭= 3,dialog_text ='一些文本')
);

当我尝试运行下面的C#代码,我得到一个参数太少的例外,我特里普尔检查拼写,我甚至复制访问查询字符串。
更改在双引号单引号没有工作,我得到了同样的异常。它甚至有可能为C#中运行此查询?



其他查询工作正常。



字符串addListeners = @INSERT INTO adressed_to(对话,听众)
值(
DMIN('身份证','图','char_name =? AND用的名字='),
DMIN('身份证','对话,喇叭= AND dialog_text =')
);??
的foreach(在d.addressed_to字符听众)
{
使用(OleDbCommand的CMD =新的OleDbCommand(addListeners,dbConn))
{
cmd.Parameters.AddWithValue( ?,listener.name);
cmd.Parameters.AddWithValue(,listener.forename?);
cmd.Parameters.AddWithValue(,speakerID?);
cmd.Parameters.AddWithValue(,d.dialog_text?);
cmd.ExecuteNonQuery();
}
}

更改字符串以下的建议没有工作



@INSERT INTO adressed_to(对话,听众)
值(
DMIN(ID,人物,char_name =?AND用的名字=),
DMIN(ID,对话,音箱= AND dialog_text =)
);?;



例外:



解决方案

It looks rather ugly, but this works for me using Provider=Microsoft.ACE.OLEDB.12.0:

string addListeners =
        @"INSERT INTO adressed_to (dialog,listener)
        VALUES (
            DMin('id', 'FIGURE', 'char_name=""' & ? & '"" AND forename=""' & ? & '""'),
            DMin('id', 'DIALOG', 'speaker=' & ? & ' AND dialog_text=""' & ? & '""')
        ); ";
using (var cmd = new OleDbCommand(addListeners, dbConn))
{
    cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = "Doe";
    cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = "John";
    cmd.Parameters.Add("?", OleDbType.Integer).Value = 3;
    cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = "some text";
    cmd.ExecuteNonQuery();
}

It also works okay with

    cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = "O'Reilly";

but it does fail if the text parameter value contains solitary double-quotes. :(

这篇关于与域聚合函数C#参数化查询(DMIN)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-18 21:08