简体   繁体   English

将Oracle数据库中的单个用户数据检索到Visual Studio C#应用程序中

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

I am using forms in visual studio to create an application and then retrieve data from Oracle database. 我正在Visual Studio中使用表单来创建应用程序,然后从Oracle数据库检索数据。 My all parts are working except getting data for the single user. 我的所有部分都在工作,除了获取单个用户的数据。 Here is form.cs section for that part 这是该部分的form.cs部分

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

This is my partial class named getcuststring.cs 这是我的名为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();
        }

    }
}

my all other functions are working but when executing this in visual studio it every time give exception out saying no data is found whereas that customer id is present in the Oracle database but it somehow not showing the result but instead raising the exception. 我的所有其他功能都正常工作,但是在Visual Studio中执行此功能时,每次都会发出异常,表示未找到任何数据,而Oracle数据库中存在该客户ID,但它不显示结果而是引发异常。 So can u tell me where I am wrong, why he's providing me with an exception saying no data found whereas that data actually exist. 那么你能告诉我我哪里错了,为什么他要给我提供一个例外,说没有发现数据,而实际上却存在数据。

This is the function 这是功能

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;

I think it is simple typo, line 我认为这是简单的错字,线条

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

should be: 应该:

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

I built similiar case, and got System.IndexOutOfRangeException when I run it. 我构建了类似的案例,并在运行它时得到了System.IndexOutOfRangeException Correcting typo solved problem. 纠正错字问题。 Whole code which worked for me: 对我有用的整个代码:

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.

相关问题 如何在没有数据适配器的 c# windows 应用程序中从 oracle 数据库中检索数据 - How to retrieve data from oracle database in c# windows application without data adapter c#Visual Studio Project安装程序从文本框中检索数据 - c# Visual Studio Project Installer retrieve data from Textbox 从单个应用程序的多个实例,C#,Visual Studio 2008将数据写入一个文件 - Writing data to one file from several instances of single application, C#, Visual Studio 2008 如何使用C#从Oracle数据库检索大数据? - How to retrieve large data from Oracle database using C#? Visual Studio C# 中的 Oracle 数据适配器 - Oracle Data Adapter in Visual Studio C# 如何从数据库C#Windows Form应用程序中检索数据? - How to Retrieve data from a database c# windows form application? C#从与用户启动时间匹配的数据库中检索数据 - C# retrieve data from database matching user start time 使用C#从Visual Studio将数据插入Access数据库中 - Inserting Data in an Access Database from Visual Studio using C# 如何使用C#Web应用程序从Oracle数据库检索图像? - How to retrieve image from Oracle database using C# web application? C#Visual Studio 2013无法连接到Oracle数据库 - c# visual studio 2013 unable to connect to oracle database
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM