当尝试使用存储过程“ sp_receiptload”清理代码时;数据没有通过。
我想使用存储过程来减少代码行。以下是我目前拥有的作品。我想使用SqlCommand receiveload_cmd = new SqlCommand(“ sp_receiptload”),它在单个批处理查询中包含所有查询。我想使用多个阅读器删除。当我尝试执行时使用nextresult不会移动结果。当我在第一行的前面放置一会儿时,错误是阅读器没有打开。
http://localhost:8080/SpringMVC/
答案 0 :(得分:0)
我不确定您如何使用下一个结果。但这是应如何使用。尝试一下,让我知道它是否适合您的情况
SqlCommand command = new SqlCommand(
"SELECT * FROM ICVENDOR ORDER BY name" +
"SELECT TOP 1 H_ID FROM ICRECEIPTH ORDER BY h_id DESC"+
"SELECT item_id FROM ICITEM",
connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
do
{
Console.WriteLine("\t{0}\t{1}", reader.GetName(0),
reader.GetName(1));
while (reader.Read())
{
//logic to read
}
}
while (reader.NextResult());
答案 1 :(得分:0)
我不会开始只为简单的SELECT查询创建存储过程,这些查询返回一组记录而没有任何特定的复杂逻辑。对于性能可能会更好,但对将来的维护则更复杂。
鉴于您对每个检索到的表都有不同的处理需求,并且可能要检索的数据量有限,我会使用DataSet和DataAdapter
using(SqlConnection con = new SqlConnection("........."))
{
con.Open();
string sqlText = @"SELECT name, vendor_id FROM ICVENDOR ORDER BY name;
SELECT TOP 1 H_ID FROM ICRECEIPTH ORDER BY h_id DESC;
SELECT item_id FROM ICITEM",
DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand(sqlText, con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
ProcessTableICVendor(ds.Tables[0]);
ProcessTableICReceipt(ds.Tables[1]);
ProcessTableICItem(ds.Tables[2]);
}
请注意,我已将第一个查询更改为仅返回所需的字段。因此,您不需要中间表即可初始化组合框。
当然,ProcessTableICxxx方法是您已经编写的代码的占位符