本文介绍了与域聚合函数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)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!