如何避免在sql连接和执行命令中重复
我可以用这个循环给我一个名字列表:
string commandText = @"SELECT ....;"; string connectionString = ConfigurationSettings.AppSettings["connectionString"]; using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand command = new SqlCommand(commandText, connection); try { connection.Open(); using (SqlDataReader reader = command.ExecuteReader()) { DataTable dt = new DataTable(); dt.Load(reader); for (int i = dt.Rows.Count - 1; i >= 0; i--) { SqlCommand addresscommand = new SqlCommand(address, connection); addresscommand.Parameters.AddWithValue("@companyName", dt.Rows[i][0].ToString()); SqlDataReader addressreader = command.ExecuteReader(); string address = addressreader.GetString(0); } } } catch (Exception ex) { } }
所以dt.Rows[i][0].ToString()
是我需要添加到我所有不同的sql命令的名称。 因此,在for循环中,我将逐个执行每个sql命令获取每个值:
SqlCommand addresscommand = new SqlCommand(address, connection); addresscommand.Parameters.AddWithValue("@companyName", dt.Rows[i][0].ToString()); SqlDataReader addressreader = addresscommand.ExecuteReader(); string comaddress = addressreader.GetString(0); SqlCommand keyProcessescommand = new SqlCommand(keyProcesses, connection); keyProcessescommand.Parameters.AddWithValue("@companyName", dt.Rows[i][0].ToString()); SqlDataReader keyProcessesreader = keyProcessescommand.ExecuteReader(); string comkeyProcesses = keyProcessesreader.GetString(0); SqlCommand standardscommand = new SqlCommand(standards, connection); standardscommand.Parameters.AddWithValue("@companyName", dt.Rows[i][0].ToString()); SqlDataReader standardsreader = standardscommand.ExecuteReader(); string comstandards = standardsreader.GetString(0);
命令字符串由哪里确定:
string address = @"SELECT address FROM Companies where companyName = @companyName"; string keyProcesses = @" SELECT distinct STUFF((SELECT ', '+ cn.name from WMCCMCategories cn INNER JOIN CategorySets uc ON uc.categoryId = cn.categoryID INNER JOIN KeyProcesses u ON u.categorySetId = uc.setId INNER JOIN Companies c ON c.companyId = u.companyId WHERE c.companyName = @companyName ORDER BY cn.name FOR XML PATH('')), 1, 1, '') AS listStr FROM WMCCMCategories cnn Group by cnn.name"; string standards = @" SELECT cn.name from WMCCMCategories cn INNER JOIN CategorySets uc ON uc.categoryId = cn.categoryID INNER JOIN Companies c ON c.standards = uc.setId WHERE c.companyName = @companyName";
我可以像上面那样执行多个sql命令吗? 最好的方法是怎样做的?
一种方法可以通过SQL中的JOIN来解决这个问题。 但是,如果不表示相同的列,则可能不正确。
现在就在一个命令中使用多个选择而言。 是的,您可以将SqlDataReader与NextResult()一起使用
请看这个链接:
http://csharp.net-informations.com/data-providers/csharp-multiple-resultsets.htm
- MVC5:Enum单选按钮,标签为displayname
- entity framework:在运行时更改连接字符串
- ASP.NET Web API从模型 – 帮助页面生成所有参数
- 如何在用户点击注销按钮后让用户登录系统并注销?
- 为什么Web API不会反序列化,但JSON.Net会?
- 使用数据注释强制模型的布尔值为true
- 如何在ASP.NET MVC应用程序中附加自定义成员资格提供程序?
- 控制器错误“Microsoft.AspNetCore.Mvc.Rendering.SelectListItem”中的MVC Core SelectList下拉列表
- 如何在ASP.NET MVC应用程序的Razor-engine中使用Html.Displar渲染ModelMetadata对象?