将存储过程中的Select Query的结果返回到List

我正在编写一个当前只包含SELECT查询的存储过程。 它将被扩展为执行许多其他操作,这就是为什么它必须是存储过程,但是现在,它是一个简单的查询。

像这样的东西:

 SELECT name, occupation, position FROM jobs WHERE ... 

我希望返回此查询的结果以在C#中使用。 我想将它添加到列表中,以便我可以将它绑定到GridView组件。

不过,我不知道怎么回事。 如果我必须在返回所有选定的数据后将其插入到列表中,那么这没关系,我只需要知道如何正确地返回数据以便我可以这样做。

如果我能以一种可以直接弹出到列表中的格式返回它,那将是理想的。

在存储过程中,您只需要编写如下所示的选择查询:

 CREATE PROCEDURE TestProcedure AS BEGIN SELECT ID, Name FROM Test END 

在C#端,您可以使用Reader,datatable,adapter进行访问。

使用适配器刚刚由Susanna Floora解释。

使用Reader:

 SqlConnection connection = new SqlConnection(ConnectionString); command = new SqlCommand("TestProcedure", connection); command.CommandType = System.Data.CommandType.StoredProcedure; connection.Open(); reader = command.ExecuteReader(); List TestList = new List(); Test test; while (reader.Read()) { test = new Test(); test.ID = int.Parse(reader["ID"].ToString()); test.Name = reader["Name"].ToString(); TestList.Add(test); } gvGrid.DataSource = TestList; gvGrid.DataBind(); 

使用dataTable:

 SqlConnection connection = new SqlConnection(ConnectionString); command = new SqlCommand("TestProcedure", connection); command.CommandType = System.Data.CommandType.StoredProcedure; connection.Open(); DataTable dt = new DataTable(); dt.Load(command.ExecuteReader()); gvGrid.DataSource = dt; gvGrid.DataBind(); 

我希望它会对你有所帮助。 🙂

 SqlConnection con = new SqlConnection("Data Source=DShp;Initial Catalog=abc;Integrated Security=True"); SqlDataAdapter da = new SqlDataAdapter("data", con); da.SelectCommand.CommandType= CommandType.StoredProcedure; DataSet ds=new DataSet(); da.Fill(ds, "data"); GridView1.DataSource = ds.Tables["data"]; GridView1.DataBind(); 
  SqlConnection connection = new SqlConnection(ConnectionString); command = new SqlCommand("TestProcedure", connection); command.CommandType = System.Data.CommandType.StoredProcedure; connection.Open(); DataTable dt = new DataTable(); dt.Load(command.ExecuteReader()); gvGrid.DataSource = dt; gvGrid.DataBind(); 

我有同样的问题,花了我很多年才找到一个简单的解决方案。

使用ASP.NET MVC 5和EF 6:

将存储过程添加到.edmx模型时,存储过程的结果将通过名为yourStoredProcName_result的自动生成对象传递。

_result对象包含与存储过程选择的数据库中的列对应的属性。

_result类可以简单地转换为列表:

 yourStoredProcName_result.ToList() 

有参数吗?

  SqlConnection conn = new SqlConnection(func.internalConnection); var cmd = new SqlCommand("usp_CustomerPortalOrderDetails", conn); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.Add("@CustomerId", SqlDbType.Int).Value = customerId; cmd.Parameters.Add("@Qid", SqlDbType.VarChar).Value = qid; conn.Open(); // Populate Production Panels DataTable listCustomerJobDetails = new DataTable(); listCustomerJobDetails.Load(cmd.ExecuteReader()); conn.Close(); 

可能会有所帮助:

从DB获取行:

 public static DataRowCollection getAllUsers(string tableName) { DataSet set = new DataSet(); SqlCommand comm = new SqlCommand(); comm.Connection = DAL.DAL.conn; comm.CommandType = CommandType.StoredProcedure; comm.CommandText = "getAllUsers"; SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = comm; da.Fill(set,tableName); DataRowCollection usersCollection = set.Tables[tableName].Rows; return usersCollection; } 

从DataRowCollection填充DataGridView:

 public static void ShowAllUsers(DataGridView grdView,string table, params string[] fields) { DataRowCollection userSet = getAllUsers(table); foreach (DataRow user in userSet) { grdView.Rows.Add(user[fields[0]], user[fields[1]], user[fields[2]], user[fields[3]]); } } 

实施:

 BLL.BLL.ShowAllUsers(grdUsers,"eusers","eid","euname","eupassword","eposition");