簡體   English   中英

C# SQL 服務器存儲過程未返回預期值

[英]C# SQL Server stored procedure not returning expected value

我寫了這個 function 來返回一個數據集,我期待一個較小的數據集,因為我只期望返回一個值,但是我得到一個相當臃腫的 object 回來,我找不到我正在尋找的值,這會導致問題我打算大量使用這個 function。

我希望有人能發現我做錯了什么,我已經包含了代碼、返回的 object 的屏幕截圖以及我的期望。 任何幫助將不勝感激。

如果我在這個問題中沒有正確表達任何內容,請隨時告訴我,我很難很好地表達我的想法。

public DataSet getPartnerParameter(string parameter)
{
    using (var dbConnection = new SqlConnection(UnityHelper.IocContainer.Resolve<IConfigHelperService>().GetConnectionString("CASConnectionString")))
    {
        dbConnection.Open();

        using (var dbCommand = new SqlCommand("GETPARTNERPARAMETER"))
        {
            dbCommand.CommandType = CommandType.StoredProcedure;
            dbCommand.Connection = dbConnection;

            SqlParameter lstrParameter = new SqlParameter("@Parameter", SqlDbType.VarChar);
            lstrParameter.Value = parameter;
            dbCommand.Parameters.Add(lstrParameter);

            var ldaDPS = new SqlDataAdapter(dbCommand);
            var ldstParameterValues = new DataSet();
            ldaDPS.Fill(ldstParameterValues);

            return ldstParameterValues;
        }
    }
}

數據對象內容

這是我期望找到的

執行存儲過程

編輯//

稍微更改了我的代碼,但仍然無法正常工作。

public String[] getPartnerParameter(string parameter)
{
    using (var dbConnection = new SqlConnection(UnityHelper.IocContainer.Resolve<IConfigHelperService>().GetConnectionString("CASConnectionString")))
    {
        dbConnection.Open();

        SqlCommand dbCommand = new SqlCommand("GETPARTNERPARAMETER", dbConnection);
        dbCommand.CommandType = CommandType.StoredProcedure;

        SqlParameter lstrParameter = new SqlParameter("@Parameter", SqlDbType.VarChar);
        lstrParameter.Value = parameter;
        dbCommand.Parameters.Add(lstrParameter);

        SqlDataReader reader = dbCommand.ExecuteReader();
        string[] results = new string[2];
        while (reader.Read())
        {

            results[0] = reader[0].ToString();
            results[1] = reader[1].ToString();
    
        }
        if (results.Length < 1)
        {
            results[0] = "Cannot find Value";
            results[1] = "S";
            return results;
        }
        else
        {

            return results;
        }
    }

錯誤是這樣的:{“程序或 function 'GETPARTNERPARAMETER' 需要參數 '@Parameter',但未提供。”}

您要查找的值可能在 dataSet.Tables[0].Rows[0] 行中。

但是,如果您期望返回一行,則 DataSet object 似乎有點矯枉過正。 我建議避免使用 SqlDataAdapter/DataSet,而是使用 SqlDataReader。

未經測試的代碼,但應該為您提供如何使用它的要點:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    SqlCommand dbCommand = new SqlCommand("GETPARTNERPARAMETER", connection);
    dbCommand.CommandType = CommandType.StoredProcedure;
    SqlParameter lstrParameter = new SqlParameter("@Parameter", SqlDbType.VarChar);
    lstrParameter.Value = "LexisNexisCreditConsentRequired";
    dbCommand.Parameters.Add(lstrParameter);

    SqlDataReader reader = dbCommand.ExecuteReader();
    while (reader.Read())
    {
        var yourValue = reader[0];
        var yourDataType = reader[1];
    }
}

一個數據DataSet是一個 object 可以包含許多表。 它不是必須的,但它可以,因此它還有許多字段、屬性和方法來支持該角色。

對於此查詢,請查看ldstParameterValues.Tables[0].Rows[0] 在該行中,您還可以看到具有另一級別括號索引的列:

DataRow row = ldstParameterValues.Tables[0].Rows[0];
var column0Value row[0];
var column1Value = row[1];

但是,這些結果的類型是object 您需要轉換值或使用數據行上的GetX()方法之一來獲得具有有意義類型的結果。

暫無
暫無

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

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