簡體   English   中英

將Oracle數據庫中的單個用戶數據檢索到Visual Studio C#應用程序中

[英]Retrieve single user data from oracle database into visual studio C# application

我正在Visual Studio中使用表單來創建應用程序,然后從Oracle數據庫檢索數據。 我的所有部分都在工作,除了獲取單個用戶的數據。 這是該部分的form.cs部分

private void getCustomerStringToolStripMenuItem_Click(object sender, EventArgs 
e)
    {
        Getcuststring g = new Getcuststring();
        g.Show();
    }

這是我的名為getcuststring.cs的局部類

namespace Assignment
{
public partial class Getcuststring : Form
{
    public Getcuststring()
    {
        InitializeComponent();
    }

    private void Getcuststring_Load(object sender, EventArgs e)
    {

    }

    private void label1_Click(object sender, EventArgs e)
    {

    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        Getting();
    }

    public void Getting()
    {
        OracleConnection conn = new OracleConnection();


        conn.ConnectionString = "Data Source=(DESCRIPTION =" + "(ADDRESS = (PROTOCOL = TCP)" +
            "(HOST = *******)(PORT = 1521))" + "(CONNECT_DATA =" + "(SID = dms)));"
            + "User Id= *****;Password= ******;";

        conn.Open();


        OracleCommand cmd = new OracleCommand();
        cmd.Connection = conn;

        cmd.CommandText = "GET_CUST_STRING_FROM_DB";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("pcustid", OracleDbType.Long).Value = textBox1.Text;
        cmd.Parameters.Add("return_value", OracleDbType.Varchar2).Direction = ParameterDirection.ReturnValue;
        try
        {

            cmd.ExecuteNonQuery();
         //   string result = string.Empty;
            var result = cmd.Parameters["result_value"].Value.ToString();
            MessageBox.Show(result);
        }
        catch (Exception ex)
        {

            MessageBox.Show(ex.Message);
        }
        finally
        {
           conn.Close();
        }

    }
}

我的所有其他功能都正常工作,但是在Visual Studio中執行此功能時,每次都會發出異常,表示未找到任何數據,而Oracle數據庫中存在該客戶ID,但它不顯示結果而是引發異常。 那么你能告訴我我哪里錯了,為什么他要給我提供一個例外,說沒有發現數據,而實際上卻存在數據。

這是功能

CREATE OR REPLACE FUNCTION GET_CUST_STRING_FROM_DB(pcustid NUMBER) RETURN 
VARCHAR2 AS 
vcustid NUMBER;
vcustname VARCHAR2(255);
vcustsales NUMBER;
vcuststatus VARCHAR2(255);
BEGIN
SELECT CUSTID,CUSTNAME,SALES_YTD,STATUS INTO 
vcustid,vcustname,vcustsales,vcuststatus
FROM CUSTOMER
WHERE CUSTID = pcustid;

RETURN 'CustID: ' || vcustid || ' Name: ' || vcustname || ' Status: ' || 
vcuststatus || ' SalesYTD: ' || vcustsales; 

EXCEPTION
WHEN NO_DATA_FOUND THEN
    RAISE_APPLICATION_ERROR(-20021,'Customer ID not found');
WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20000,SQLERRM);
END;

我認為這是簡單的錯字,線條

var result = cmd.Parameters["result_value"].Value.ToString();

應該:

var result = cmd.Parameters["return_value"].Value.ToString();

我構建了類似的案例,並在運行它時得到了System.IndexOutOfRangeException 糾正錯字問題。 對我有用的整個代碼:

OracleConnection CONNECTION 
    = new OracleConnection("Data Source=XX;User Id=XX;Password=XX;");
CONNECTION.Open();
OracleCommand cmd = new OracleCommand() { Connection = CONNECTION };
cmd.CommandText = "GET_CUST_STRING_FROM_DB";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add("pcustid", OracleType.Double).Value = textBox1.Text;
cmd.Parameters.Add("return_value", OracleType.VarChar, 500).Direction 
    = System.Data.ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
var result = cmd.Parameters["return_value"].Value.ToString();

Console.WriteLine(result);

CONNECTION.Close();

暫無
暫無

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

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