问题是无法获得所有值,只有第一条记录可用,即PMDES1_01
未捕获其他返回值,请帮助使用此代码
public class DataxAero
{
//Create new method to get data from xAero database
public static string GetData(string ORDNUM_10)
{
string PMDES1_01 = "";
string DESCRPTN_104 = "";
string PRTNUM_10 = "";
string ORDREF_10 = "";
string TNXDTE_01 = "";
//Create connection
SqlConnection con = new SqlConnection(@"Data Source=xxx;Initial Catalog=xxx;Integrated Security=true;");
//SQL Command
SqlCommand cmd = new SqlCommand("SELECT ...............", con);
//Open connection
con.Open();
//to read from SQL Server
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
PMDES1_01 = dr["PMDES1_01"].ToString();
PRTNUM_10 = dr["PRTNUM_10"].ToString();
DESCRPTN_104 = dr["DESCRPTN_104"].ToString();
ORDREF_10 = dr["ORDREF_10"].ToString();
TNXDTE_01 = dr["TNXDTE_01"].ToString();
}
//close connections
dr.Close();
con.Close();
//get the values
return PMDES1_01;
return PRTNUM_10; (get error here Unreachable code detected)
return DESCRPTN_104;
return ORDREF_10;
return TNXDTE_01;
答案 0 :(得分:11)
看起来这是在尝试返回相关的值 - 数字,描述,订单参考等。
您应该创建一个类来封装所有这些值,将方法的返回类型更改为该类,然后最后您的方法根据从数据库中检索的值创建该类的实例。
public static Order GetOrder(string orderId)
{
// Use a "using" statement for each resource (database connection etc),
// so that the resources are released even if there's an exception
using (...)
{
// Do the query here...
// Note "if" rather than "while" - we're only going to return
// a single result anyway
if (dr.Read())
{
string manufacturer = (string) dr["PMDES1_01"];
int partNumber = (int) dr["PRTNUM_10"];
string description = (string) dr["DESCRPTN_104"];
int orderReference = (int) dr["ORDREF_10"];
string text = (string) dr["TNXDTE_01"];
return new Order(manufacturer, partNumber, description,
orderReference, text);
}
// No results!
return null;
}
}
我已经猜到了真正的数据类型,但我怀疑它们实际上是所有字符串。另请注意变量名称,更改为更易读并符合.NET习语。
答案 1 :(得分:9)
答案 2 :(得分:0)
要专门回答您的问题,这样做的方法是将它们作为out
参数传递。但是,我同意Chris Sinclair的观点,如果它们都是相关的,你应该创建一个对象,在一个对象中包含所有这些值。
答案 3 :(得分:0)
您可以使用字符串数组。方法只有一次返回。
答案 4 :(得分:0)
public static List<string> GetData(string ORDNUM_10)
{
//snip...
return new List<string> { PMDES1_01, PRTNUM_10, DESCRPTN_104, ORDREF_10, TNXDTE_01 };
}
然后,您的调用代码可以从返回的列表中提取值。