非法尝试使用Text / Byte主变量 – 插入TEXT列
尝试通过Dapper插入表(文本列),并从Informix获取错误:
Illegal attempt to use Text/Byte host variable
我已经编写了一个小程序来模拟这个,我仍然面临着问题。
我们目前无法使用Informix驱动程序,因为它们不适合我们的需求。
using Dapper; using System; using System.Data.Odbc; namespace DapperParamsTest { class Program { static void Main(string[] args) { OdbcConnection conn = new System.Data.Odbc.OdbcConnection("Driver={IBM INFORMIX ODBC DRIVER (64-bit)}; Host=bylgia; Server=bylgia; Service=sqlexec; Protocol=onsoctcp; Database=DATABASE; Client_Locale=en_US.CP1252; DB_LOCALE=en_GB.1252"); var dynParams = new DynamicParameters(); dynParams.Add("np_c_ref",-1); dynParams.Add("np_np_type","T"); dynParams.Add("np_text", System.Text.Encoding.Default.GetBytes("TEXT INPUT"), System.Data.DbType.Binary); conn.Execute("INSERT INTO notepads (np_c_ref, np_type,np_text) VALUES (?,?,?)",dynParams); Console.WriteLine("Written"); Console.ReadLine(); } } }
表结构:
CREATE TABLE notepad ( np_c_ref int, np_type char(1), np_text TEXT )
这个问题实际上可能比我的其他答案设想简单得多; 我刚刚注意到你说列是TEXT
,但你传递的是一个byte[]
。 如果您需要,您可能应该使用BYTE
数据类型。 如果你想使用TEXT
– 只需传递string
(即"TEXT INPUT"
)并忘记Encoding
。
我不确定我知道我需要重新设置这个设置…但是,这里有一些尝试:
看起来Informix需要位置参数。 最近的dapper版本实际上支持修改后的语法,以使这更方便。 你能试一下吗:
conn.Execute("INSERT INTO notepads (np_c_ref, np_type,np_text) VALUES (?np_c_ref?,?np_np_type?,?np_text?)",dynParams);
另外:尝试使用'T'
代替"T"
(字符与字符串)。
如果问题是参数顺序,这可能会有所帮助。 另请注意:如果此方法有效,您还可以使用更方便的匿名类型方法来指定参数:
conn.Execute("INSERT INTO notepads (np_c_ref, np_type,np_text) VALUES (?np_c_ref?,?np_np_type?,?np_text?)", new { np_c_ref = -1, np_np_type = "T", np_text = System.Text.Encoding.Default.GetBytes("TEXT INPUT") });
最终的最终想法:几乎没有Encoding.Default
正确或适当的场景。 除了错误之外,很少使用它。
- AZURE:在workerrole中异步运行Run()
- 如何使用数据库第一种方法命名外键
- 扩展ASP.NET标识角色:IdentityRole不是当前上下文模型的一部分
- WPF IValueConverter – 将多个值转换为单个值
- 当使用新行传递DataRow集合时,更新需要有效的InsertCommand
- System.Text.Encoding.GetEncoding(“iso-8859-1”)抛出PlatformNotSupportedException?
- 我多次调用GC.Collect()后图像内存干净
- 在C#中访问成员时,`this`关键字是可选的吗?
- 将datetime2数据类型转换为日期时间数据类型会导致超出范围的值