各位老大好,这几天用使用OleDbCommand操作informix数据库遇到了问题无法解决,郁闷,帮忙看看哈
只要dict里面的值大于int,执行cmd.ExecuteReader(CommandBehavior.SingleRow)就会报错,可是我那是uint啊!!informix数据库里面的FP类型是decimal(10)
在Oracle下面运行是可以的private string mSelectSql = "select FP0,FP1,FP2,FP3 from tfa_re where FP0 = ? and FP1 = ? and FP2 = ? and FP3 = ?"; private void Test()
{
Dictionary<string, uint> dict = new Dictionary<string, uint>();
dict["FP0"] = 1244572465;
dict["FP1"] = 2147483649;
dict["FP2"] = 1323456546;
dict["FP3"] = 0; using (mConnection = new OleDbConnection(mConnectStr))
{
try
{
mConnection.Open(); OleDbCommand cmd = CreateCommand(mSelectSql, dict);
if (cmd != null)
{
cmd.ExecuteReader(CommandBehavior.SingleRow);
}
}
catch (Exception ex)
{
}
}
} private OleDbCommand CreateCommand(string sql, Dictionary<string, uint> parameter)
{
if (mConnection == null)
{
return null;
} List<OleDbParameter> paramList = new List<OleDbParameter>(); if (parameter != null)
{
foreach (string key in parameter.Keys)
{
OleDbParameter parm = new OleDbParameter();
parm.ParameterName = key;
parm.Value = parameter[key]; paramList.Add(parm);
}
} OleDbCommand cmd = mConnection.CreateCommand();
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
cmd.Transaction = null;
cmd.Parameters.AddRange(paramList.ToArray()); return cmd;
}System.InvalidOperationException:{"因为数据值溢出了提供程序所使用的类型,所以命令参数[1] '' 的转换失败。"}
在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleRow(tagDBPARAMS dbParams, Object& executeResult)
在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
在 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
在 InfromixText.Form1.Test() 位置 D:\My Projects\IBatisTest\InfromixText\Form1.cs:行号 89
只要dict里面的值大于int,执行cmd.ExecuteReader(CommandBehavior.SingleRow)就会报错,可是我那是uint啊!!informix数据库里面的FP类型是decimal(10)
在Oracle下面运行是可以的private string mSelectSql = "select FP0,FP1,FP2,FP3 from tfa_re where FP0 = ? and FP1 = ? and FP2 = ? and FP3 = ?"; private void Test()
{
Dictionary<string, uint> dict = new Dictionary<string, uint>();
dict["FP0"] = 1244572465;
dict["FP1"] = 2147483649;
dict["FP2"] = 1323456546;
dict["FP3"] = 0; using (mConnection = new OleDbConnection(mConnectStr))
{
try
{
mConnection.Open(); OleDbCommand cmd = CreateCommand(mSelectSql, dict);
if (cmd != null)
{
cmd.ExecuteReader(CommandBehavior.SingleRow);
}
}
catch (Exception ex)
{
}
}
} private OleDbCommand CreateCommand(string sql, Dictionary<string, uint> parameter)
{
if (mConnection == null)
{
return null;
} List<OleDbParameter> paramList = new List<OleDbParameter>(); if (parameter != null)
{
foreach (string key in parameter.Keys)
{
OleDbParameter parm = new OleDbParameter();
parm.ParameterName = key;
parm.Value = parameter[key]; paramList.Add(parm);
}
} OleDbCommand cmd = mConnection.CreateCommand();
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
cmd.Transaction = null;
cmd.Parameters.AddRange(paramList.ToArray()); return cmd;
}System.InvalidOperationException:{"因为数据值溢出了提供程序所使用的类型,所以命令参数[1] '' 的转换失败。"}
在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleRow(tagDBPARAMS dbParams, Object& executeResult)
在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
在 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
在 InfromixText.Form1.Test() 位置 D:\My Projects\IBatisTest\InfromixText\Form1.cs:行号 89
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货