簡體   English   中英

如何在C#.NET應用程序的Oracle數據庫中插入圖像

[英]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頁面中所述的@

您可以使用兩種方法將圖像保存到數據庫中:

  1. 將圖像轉換為Base64並將輸出字符串保存到數據庫
  2. 將映像另存為服務器上的文件,並將該映像的路徑保存到數據庫中(推薦)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM