[英]How to insert image in oracle database in c# .net application
當我嘗試插入時,出現錯誤“ 值不足 ”。
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;
}
您的參數名稱錯誤,需要將它們命名為您在參數中設置的名稱-您在命令中使用:a
,在設置參數時使用@a
。 參數以@
(對於SqlServer)或:
對於OracleServer)開頭。
如果表中的列多於5列,則還必須提供它們。否則,數據庫將不知道將給定參數放在何處。 (如果您的第6列可以正常工作,則自動增加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;
}
}
}
我更改了您的代碼,以受益於using(var orc = new OracleConnection()) { .... }
-具有IDisposables的模式-它在離開范圍時自動關閉/處置您的連接(與命令相同)。
根據Wernfried-Domscheit的評論進行編輯:
Oracle需要:
( @
是用於SqlServer)-這個答案how-to-to-write-parameterized-oracle-insert-query支持它-它甚至使用不帶參數的名稱:
-因此,也許參數名只是由“ order”而不是“ by”插入名稱”
您的Product
表中的列很可能會比值列表中的列多。 明確給出列名:
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();
請更改上面代碼中的列名,以匹配表中的列名。 讓我們知道這是否對您有用。
編輯
如Patrick Artner在其寫得很好的答案中所述,參數名稱占位符在CommandText中以及將參數添加到命令時必須相同。 使用OracleCommand
,占位符必須為:
而不是MSDN OracleCommand.Parameters頁面中所述的@
。
您可以使用兩種方法將圖像保存到數據庫中:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.