[英]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.