我正在使用oracle函数将c#windows窗体中的数据插入到我的oracle数据库中,当然我需要使用" Oracle Data Access Component" oracle文档说,十进制数据类型C#等于oracle数据库中的数字数据类型列。
以下代码有什么问题!
无法转换类型为#System; Int32'的对象输入 ' Oracle.DataAccess.Client.OracleParameter'
string connstr = @"Data Source=orcl; User Id=user; password=admin;";
string insertcmdtxt = @"F_INSERT_ORDER_DATA"; //~ F_INSERT_ORDER_DATA ~//
using (OracleConnection conn = new OracleConnection(connstr))
using (OracleCommand cmd = new OracleCommand(insertcmdtxt, conn))
{
try
{
conn.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = insertcmdtxt;
cmd.Parameters.Add(new OracleParameter("P_CUSTOMER_ID", OracleDbType.Decimal).Value = TB_CUSTOMER_ID.Text);
cmd.Parameters.Add(new OracleParameter("P_NOTES", OracleDbType.Varchar2).Value = TB_NOTES.Text);
cmd.Parameters.Add(":vORDER_ID", OracleDbType.Varchar2, ParameterDirection.ReturnValue);
cmd.ExecuteNonQuery();
TB_INVOICE_ID.Text = (cmd.Parameters[":vORDER_ID"].Value).ToString();
}
catch (Exception EX)
{
textBox1.Text = insertcmdtxt;
MessageBox.Show(EX.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBox1.Text = EX.Message;
return;
}
}
答案 0 :(得分:0)
Value = 1000
返回一个整数,Add
方法需要一个OracleParameter
类型的对象。您有两个选项,要么将初始化与设置值分开:
var paramCustomerId = new OracleParameter("P_CUSTOMER_ID", OracleDbType.Decimal);
paramCustomerId.Value = Decimal.Parse(TB_CUSTOMER_ID.Text);
cmd.Parameters.Add(paramCustomerId);
或者作为一种可读性不高的快捷方式,您可以这样做:
var paramCustID = new OracleParameter("P_CUSTOMER_ID", OracleDbType.Decimal);
cmd.Parameters.Add(paramCustID).Value = Decimal.Parse(TB_CUSTOMER_ID.Text);
您需要对其他2个参数执行相同的操作。
答案 1 :(得分:0)
我认为这是你想要做的事情
cmd.Parameters.Add(new OracleParameter("P_CUSTOMER_ID", OracleDbType.Decimal)).Value = 1000;
cmd.Parameters.Add(new OracleParameter("P_NOTES", OracleDbType.Varchar2)).Value = TB_NOTES.Text;
注意右括号)
答案 2 :(得分:0)
你无法像这样调用Add
的原因是赋值表达式的类型:当你写
something = 123
(在这种情况下,something
是新创建的对象的Value
属性)赋值表达式的类型是要分配的值的类型,即int
。< / p>
您应该可以使用初始化语法来完成它:
cmd.Parameters.Add(
new OracleParameter("P_CUSTOMER_ID", OracleDbType.Decimal) {
Value = 1000M // "M" makes decimal
}
);
现在,表达式的类型仍为OracleParameter
,您可以继续进行通话。
您可以通过为其添加int
后缀,将值的类型从decimal
更改为M
。