C# 如何在c.net应用程序中插入oracle数据库中的图像
当我尝试插入时,出现错误“值不足”C# 如何在c.net应用程序中插入oracle数据库中的图像,c#,.net,oracle,C#,.net,Oracle,当我尝试插入时,出现错误“值不足” public int CreateAdmin( string product_name, string quality, string quantity, string price, string product_image) { string connectionString = "User Id=hr;Password=hr;Data Source=localhost:1521/xe"; OracleConnect
public int CreateAdmin( string product_name, string quality, string quantity, string price, string product_image)
{
string connectionString = "User Id=hr;Password=hr;Data Source=localhost:1521/xe";
OracleConnection orc = new OracleConnection();
orc.ConnectionString = connectionString; //assign connection
//OracleDataAdapter da = new OracleDataAdapter();
orc.Open();
OracleCommand cmd = new OracleCommand();//object of command
cmd.Connection = orc;
cmd.CommandType = CommandType.Text; // declare command type
cmd.CommandText = "insert into Product values( :b, :c, :d, :a, :p)";
cmd.Parameters.Add("@b", product_name); //add paramenter
cmd.Parameters.Add("@c", quality);
cmd.Parameters.Add("@d", quantity);
cmd.Parameters.Add("@a", price);
cmd.Parameters.Add("@p", product_image);
//da.InsertCommand = cmd;
int i = cmd.ExecuteNonQuery();
orc.Close();
return i;
}
产品表中的列很可能比值列表中的列多。明确给出列名:
OracleCommand cmd = new OracleCommand();//object of command
cmd.Connection = orc;
cmd.CommandType = CommandType.Text; // declare command type
// explicitly add column names
cmd.CommandText = "insert into Product (product_name, quality, quantity, price, product_image) values( :b, :c, :d, :a, :p)";
cmd.Parameters.Add(":b", product_name); //add paramenter
cmd.Parameters.Add(":c", quality);
cmd.Parameters.Add(":d", quantity);
cmd.Parameters.Add(":a", price);
cmd.Parameters.Add(":p", product_image);
int i = cmd.ExecuteNonQuery();
请更改上述代码中的列名以匹配表中的列名。让我们知道这是否对你有效
编辑
正如在他写得很好的回答中所述,在CommandText中以及在向命令添加参数时,参数名称占位符必须相同。使用OracleCommand时,占位符必须是:,而不是。中所述的@。您有两个选项可以将图像保存到数据库中: 将图像转换为Base64并将输出字符串保存到数据库中 将图像另存为服务器上的文件,并将此图像的路径保存到数据库
您的paramnames是错误的,它们需要命名为您在params中设置的名称-您在命令中使用:a,在设置参数时使用@a。对于SqlServer,参数以@开头;对于OracleServer,参数以:开头 如果表中的列数多于这5列,则还必须提供这些列,否则db不知道将给定参数放在何处。另外,一个汽车公司ID也可以,如果这是你的第六栏,它会起作用
public int CreateAdmin (string product_name, string quality, string quantity, string price, string product_image)
{
string connectionString = "User Id=hr;Password=hr;Data Source=localhost:1521/xe";
using (var orc = new OracleConnection (connectionString))
{
using (var cmd = orc.CreateCommand ())
{
cmd.CommandType = CommandType.Text; // declare command type
// Product has exactly 5 or 5 + 1 auto-inc ID column, else provide the
// column names as well:
// insert into Product ( name,qual,quant,price,img ) values( :b, :c, :d, :a, :p)";
cmd.CommandText = "insert into Product values( :b, :c, :d, :a, :p)";
cmd.Parameters.Add (":b", product_name); //add paramenter
cmd.Parameters.Add (":c", quality);
cmd.Parameters.Add (":d", quantity);
cmd.Parameters.Add (":a", price);
cmd.Parameters.Add (":p", product_image);
//da.InsertCommand = cmd;
int i = cmd.ExecuteNonQuery ();
return i;
}
}
}
我更改了您的代码,使其受益于使用var orc=new OracleConnection{..}模式和IDisposables,它会在离开作用域时自动关闭/处理与命令相同的连接
因评论而编辑,作者:
Oracle需要:@是用于SqlServer的-此答案支持它-它甚至使用参数名而不使用:-因此,也许参数名只是按顺序插入而不是按名称插入的您能否发布整个错误消息如果将所有添加的参数更改为参数会发生什么情况。添加新的OracleParameterparamname,paramvalue;例如Parameters.Addnew OracleParametera、price;我认为@的可能副本适用于SQL Server。对于Oracle,它必须是:在SQL字符串和参数中name@WernfriedDomscheit感谢您指出这一点-链接的答案省略了参数名称中的:尽管如此。