我不清楚如何在使用C#时为输出变量格式化SqlDataAdapter
错误讯息:
索引(从零开始)必须大于或等于零且小于参数列表的大小。
代码示例(存储过程正常)
private DataTable updateOrdEodHold(DataTable tb, out string mnpft, out string authld, out string trd, out string hld, out string extnow)
{
// start the connection string
string connstr = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
SqlConnection myConn = new SqlConnection(connstr);
// declare Symbol and assign for Errors Catch Exception
string Symbol = "";
string sqlComm = "dbo.UpdateOrdEodHold";
DataTable HoldVals = new DataTable();
SqlDataAdapter dataAdp = new SqlDataAdapter(sqlComm, myConn);
dataAdp.SelectCommand.CommandType = CommandType.StoredProcedure;
string ticker = (string)Convert.ToString(tb.Rows[0]["Ticker"]);
// update Symbol for Catch ex
Symbol = ticker.ToString();
String company = (string)Convert.ToString(tb.Rows[0]["Company"]);
String avgprofit = (string)Convert.ToString(tb.Rows[0]["AvgProfit"]);
String extdte = (string)Convert.ToString(tb.Rows[0]["ExitDate"]);
dataAdp.SelectCommand.Parameters.Clear();
dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@ticker", SqlDbType.VarChar, 10));
dataAdp.SelectCommand.Parameters["@ticker"].Value = (string)ticker.ToString();
dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@company", SqlDbType.VarChar, 25));
dataAdp.SelectCommand.Parameters["@company"].Value = (string)company.ToString();
dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@avgpft", SqlDbType.VarChar, 10));
dataAdp.SelectCommand.Parameters["@avgpft"].Value = (string)avgprofit.ToString();
dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@mnpft", SqlDbType.VarChar, 10));
dataAdp.SelectCommand.Parameters["@mnpft"].Direction = ParameterDirection.Output;
dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@authld", SqlDbType.VarChar, 6));
dataAdp.SelectCommand.Parameters["@authld"].Direction = ParameterDirection.Output;
dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@hld", SqlDbType.VarChar, 6));
dataAdp.SelectCommand.Parameters["@hld"].Direction = ParameterDirection.Output;
dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@trd", SqlDbType.VarChar, 6));
dataAdp.SelectCommand.Parameters["@trd"].Direction = ParameterDirection.Output;
dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@extnow", SqlDbType.VarChar, 6));
dataAdp.SelectCommand.Parameters["@extnow"].Direction = ParameterDirection.Output;
dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@extdte", SqlDbType.VarChar, 15));
dataAdp.SelectCommand.Parameters["@extdte"].Value = (string)extdte.ToString();
dataAdp.Fill(HoldVals);
mnpft = HoldVals.Rows[0]["MinProfit"].ToString();
authld = HoldVals.Rows[0]["AutoHold"].ToString();
trd = HoldVals.Rows[0]["Trade"].ToString();
hld = HoldVals.Rows[0]["Hold"].ToString();
extnow = HoldVals.Rows[0]["ExitNow"].ToString();
return HoldVals;
}
答案 0 :(得分:6)
您需要保持对Output参数变量的引用,以便在适配器执行命令后,您可以使用 parameter.Value 访问返回给它的值。
//Create the parameter
SqlParameter parameter = new SqlParameter("@mnpft", SqlDbType.VarChar);
//Set the parameter direction as output
parameter.Direction = ParameterDirection.Output;
sqlCommand.Parameters.Add(parameter);
SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCommand);
sqlAdapter.Fill(dataSet);
//Fetch the output parameter after doing the Fill
string outputValue = Convert.ToString(parameter.Value);